我正在尝试在SO使用的形式的Django中启用缓慢的URL:example.com/id/slug。 我没有启用slugs的问题,并且目前设置了以下形式的URL:http://127.0.0.1:8000/articles/id/(例如/ articles / 1 /)并且工作正常。相应的URL模式是:
(r'^(?P<object_id>\d+)/$', 'django.views.generic.list_detail.object_detail', info_dict),
如果我将网址格式更改为:
(r'^(?P<slug>\d+)/$', 'django.views.generic.list_detail.object_detail', info_dict),
然后,当我导航到http://127.0.0.1:8000/articles/another-article/时,我收到以下错误:
当前网址,文章/其他文章/与其中任何一个都不匹配。
但是,如果我尝试:
http://127.0.0.1:8000/articles/1/
我收到错误:
找不到与查询匹配的文章
最终我希望能够通过以下方式导航到aricle:
http://127.0.0.1:8000/articles/1/ 要么 http://127.0.0.1:8000/articles/1/another-article/
答案 0 :(得分:25)
在问这个问题之前,我应该多一点耐心,因为我想出了答案:
(r'^(?P<object_id>\d+)/$', 'django.views.generic.list_detail.object_detail', info_dict),
(r'^(?P<object_id>\d+)/(?P<slug>[-\w]+)/$', 'django.views.generic.list_detail.object_detail', info_dict),
第一种模式允许使用/ articles / 1 /形式的URL,这意味着第二个urlpattern(包括slug)是可选的。