gpt4 book ai didi

regex - Django slug 的 URL 中的正则表达式

转载 作者:行者123 更新时间:2023-12-03 23:00:14 25 4
gpt4 key购买 nike

我有 2 个 URL,在 URL 中有一个 slug 字段。

url(r'^genres/(?P<slug>.+)/$', views.genre_view, name='genre_view'),
url(r'^genres/(?P<slug>.+)/monthly/$', views.genre_month, name='genre_month'),

第一个打开正常,但第二个给出 DoesNotExist错误提示 Genres matching query does not exist .

这是我在 HTML 中访问第二个 URL 的方式
<li><a href="{% url 'genre_month' slug=genre.slug %}">Monthly Top Songs</a></li>

我试图在 View 中打印 slug。它被传递为 genre_name/monthly而不是 genre_name .

我认为问题在于 URL 中的正则表达式。知道这里有什么问题吗?

最佳答案

Django 总是使用 第一个匹配的模式。对于类似于 genres/genre_name/monthly 的网址你的第一个模式匹配,所以第二个永远不会使用。事实是正则表达式不够具体,允许所有字符 - 这似乎没有意义。

你可以颠倒这些模式的顺序,但你应该做的是让它们更具体(比较:urls.py example in generic class-based views docs):

url(r'^genres/(?P<slug>[-\w]+)/$', views.genre_view, name='genre_view'),
url(r'^genres/(?P<slug>[-\w]+)/monthly/$', views.genre_month, name='genre_month'),

2020年编辑:

那些日子(从 Django 2.0 开始),你可以(并且应该)使用 path 而不是 url .它提供了内置的 path converters ,包括 slug :
path('genres/<slug:slug>/', views.genre_view, name='genre_view'),
path('genres/<slug:slug>/monthly/', views.genre_month, name='genre_month'),

关于regex - Django slug 的 URL 中的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23358685/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com