我需要你的帮助。我在做自己的项目。我需要从新闻列表中显示单个新闻。我会做下一步:
模特中的:
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包含字符和数字。
我做错了什么?
最好的问候, 亚历
答案 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'网址的正则表达式是否正常,但这是另一个问题。