10

我正在尝试在 Django 中启用 SO 使用的形式的 sluggified URL:example.com/id/slug。我启用 slug 没有问题,并且当前设置的 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),

如果我将 URL 模式更改为:

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

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

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

但是,如果我尝试:

http://127.0.0.1:8000/articles/1/

我得到错误:

未找到与查询匹配的文章

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

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

4

1 回答 1

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)是可选的。

于 2009-10-25T12:25:33.833 回答