【问题标题】:Enable sluggified URLs in Django在 Django 中启用 sluggified URL
【发布时间】:2010-12-09 21:30:33
【问题描述】:

我正在尝试在 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/

【问题讨论】:

    标签: django url slug


    【解决方案1】:

    在问这个问题之前我应该​​再耐心一点,因为我已经找到了答案:

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

    【讨论】:

    • 是的,您错过了实际 slug 的正则表达式模式匹配。
    猜你喜欢
    • 2012-03-24
    • 2022-09-27
    • 2021-05-16
    • 2016-06-10
    • 2014-02-18
    • 1970-01-01
    • 2017-10-21
    • 2016-12-27
    • 2012-02-21
    相关资源
    最近更新 更多