Django 中的 Slug URL

Slug in Django URL

我需要你的帮助。我在做我自己的项目。我需要显示新闻中的单个新闻 list.I 执行后续步骤:

模型中:

 class Notice(models.Model):
     notice_header = models.CharField(max_length=150, verbose_name="Notice header", blank=False)
     notice_content = RichTextField(verbose_name="Notice content")
     notice_publish_date = models.DateField(verbose_name="Publish date", default=date.today)
     notice_slug = models.CharField(max_length=50, verbose_name="Notice URL", blank=False, default="#", unique=True)
     #SEO Data
     seo_page_title = models.CharField(max_length=150, verbose_name="SEO Page Title", blank=True)
     seo_page_description = models.TextField(verbose_name="SEO Page Description", blank=True)
     seo_page_keywords = models.TextField(verbose_name="SEO Keywords", blank=True)

     class Meta:
         verbose_name = "Notice"
         verbose_name_plural = "Notice list"

     def __str__(self):
         return self.notice_header

     def __unicode__(self):
         return self.notice_header

在视图中:

from django.shortcuts import render_to_response as rtp
from models import *

def notice_list(request):
    notice_articles = Notice.objects.order_by("-id")
    context = {"NOTICE_LIST": notice_articles}
    return rtp("notice.html", context)


def single_notice(request, alias):
    current_news = Notice.objects.get(notice_slug=alias)
    context = {"NOTICE_SINGLE": current_news}
    return rtp("notice_single.html", context)

在网址中:

url(r'notice/', notice_list), 
url(r'notice/(?P<alias>[^/]+)', single_notice),

在notice.html

{

% for notice in NOTICE_LIST %}
                <div class="uk-width-1-2@l uk-width-1-2@m">
                    <a href="{{ notice.notice_slug }}">
                        {{ notice.notice_header }}
                    </a>
                </div>
                <div class="uk-width-1-2@l uk-width-1-2@m uk-visible@m"><p>{{ notice.notice_publish_date }}</p></div>
                <hr class="uk-width-1-1@l">
            {% endfor %}

我在页面上看到通知列表。但是,当我尝试 select 单一通知阅读时,页面重新加载和 single_notice 功能不起作用。

数据库中的

notice_slug 包含字符和数字。

我做错了什么?

此致, 亚历克斯

此处:

<a href="{{ notice.notice_slug }}">

这不是 url,它只是其中的一部分。同样正如 Alasdair 正确提到的那样,您的 "notice_list" url 正则表达式不以“$”结尾,因此它也将匹配 "notice/" 因此您的页面重新加载(您将获得 404 而不是正确的正则表达式)

首先要给您的 url 起个名字(真的让生活更轻松):

urls = [
    url(r'^notice/$', notice_list, name="notice_list"), 
    url(r'^notice/(?P<alias>[^/]+)$', single_notice, name="single_notice"),
    # etc
    ]

然后在您的模板中使用 {% url %} 标签:

<a href="{% url 'single_notice' alias=notice.notice_slug %}">whatever/<a>

注意:我也不太确定 'single_notice' url 的正则表达式是否正确,但这是另一个问题。