在Django中启用缓慢的URL

Pet*_*rne 10 django url slug

我试图在SO使用的形式的Django中启用缓慢的URL:example.com/id/slug.我没有启用slugs的问题,并且目前设置了以下形式的URL:http://127.0.0.1:8000/articles/id /(例如/ articles/1 /),并且工作正常.相应的URLpattern是:

(r'^(?P<object_id>\d+)/$',  'django.views.generic.list_detail.object_detail', info_dict),
Run Code Online (Sandbox Code Playgroud)

如果我将URL模式更改为:

(r'^(?P<slug>\d+)/$',  'django.views.generic.list_detail.object_detail', info_dict),
Run Code Online (Sandbox Code Playgroud)

然后,当我导航到http://127.0.0.1:8000/articles/another-article/时,我收到以下错误:

当前的URL,articles/another-article /与其中任何一个都不匹配.

但是,如果我尝试:

http://127.0.0.1:8000/articles/1/
Run Code Online (Sandbox Code Playgroud)

我收到错误:

找不到与查询匹配的文章

最终,我希望能够通过以下任一方式导航到aricle:

http://127.0.0.1:8000/articles/1/http://127.0.0.1:8000/articles/1/another-article/

Pet*_*rne 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),
Run Code Online (Sandbox Code Playgroud)

第一个模式允许表单/ articles/1 /的URL,这意味着第二个urlpattern(包括slug)是可选的.