在Django URL中插入

时间:2017-11-09 12:55:34

标签: python django slug

我需要你的帮助。我在做自己的项目。我需要从新闻列表中显示单个新闻。我会做下一步:

模特中的

 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 %}

我在页面上看到了通知单。但是,当我尝试选择单个通知进行阅读时,页面重新加载和 single_notice 功能都无法正常工作。

数据库中的notice_slug包含字符和数字。

我做错了什么?

最好的问候, 亚历

1 个答案:

答案 0 :(得分:4)

这里:

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

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

你想要的是首先为你的网址命名(让生活更轻松,真的):

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'网址的正则表达式是否正常,但这是另一个问题。