我创建了一个非常简单的博客,但是遇到了几个URL问题。对于特定于标记的post视图,我遇到了以下问题。
特定的后视图示例
这两个站点呈现相同的内容,并希望第二个站点呈现404。
website.com/post/1/hello-world
website.com/post/1/hello-world/non-sense(应该呈现404)
标记视图
website.com/tag/python:这将呈现所有标记为python的帖子,很棒。但是……
website.com/tag/python/party:这将呈现所有标记为“python/party”的帖子,而不是呈现404。
这是我的URL模式设置,你可以看看。
url(r'^post/(?P<pk>\d+)/(?P<post_title>)', DetailView.as_view(
model = post,
template_name = "post.html")),
url(r'^post/$', ListView.as_view(
queryset = post.objects.all().order_by("-date"),
template_name = "archives.html")),
url(r'^archives/$', ListView.as_view(
queryset = post.objects.all().order_by("-date"),
template_name = "archives.html")),
url(r'^tag/(?P<tag>[\w|\W]+)', 'tags'),
已更新 标签解决方案:
url(r'^tag/(?P<tag>[\w]+)\W*/$', 'tags'),
邮政解决方案:
url(r'^post/(?P<pk>\d+)/(?P<post_url>[\w-]+)/$', DetailView.as_view(
model = post,
template_name = "post.html")),
谢谢哈克贝利·芬恩和克拉克斯的帮助!
当然,现在我看到两种方法。
首先,更改为:
(顺便说一下,[]在您的情况下是不必要的)这样,您就可以将名为“end”的组作为标记控制器的参数,并对其进行测试,然后重定向到404自定义页或生成404经典错误。
第二种可能性是: 添加另一个url挂钩和控制器:
这样,就禁止在“tag/”后面包含其他字符而不是字母数字的url。
如果您只想在结尾处允许一个可选的“/”,可以在新钩子的位置写入:
您的post
URLconf
正则表达式应该改成
表示
URLconf
以斜杠结尾无论如何,试着在post
ListView
之后定义您DetailView
URLconf
。在我看来,如果您将列表视图和详细视图更改为posts/
和post/
,您的问题将得到解决。对于tags
URLconf
问题的解决方案是相同的。你的正则表达式
表示组标记将包含“tag/”后的所有字符。[\w |\w]表示“所有字母数字”或“除字母数字外的所有字母数字”。这相当于“所有字符”。
应该改成
这将首先阻止您的组非字母数字
相关问题 更多 >
编程相关推荐