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 的正则表达式是否正确,但这是另一个问题。
我需要你的帮助。我在做我自己的项目。我需要显示新闻中的单个新闻 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 的正则表达式是否正确,但这是另一个问题。