在我的django项目中,我有一个简单的url

url(r'^report/(?P<slug>[\w-]+)/$', views.Report.as_view(), name='report')

我已经把这个特殊的网址放在我的应用程序网址文件的底部。slug字段是一个可选参数,可以作为请求的一部分提供,也可以不作为请求的一部分提供。
现在,在一个模板中,当我用这个语法引用这个url时,我得到一个NoReverseMatch found错误。我在另一个应用程序中尝试过同样的方法,效果很好。有人能指出这种行为的可能原因吗?我知道我可以有两个独立的网址,但如果可以做到使用一个,我宁愿它。

最佳答案

您得到的错误是因为slug是regex中的必需组。

r'^report/(?P<slug>[\w-]+)/$

我相信您可以通过将slug包装到一个非捕获组中并使其成为可选的来使其工作。
r'^report/(?:(?P<slug>[\w-]+)?)/$

就我个人而言,在urls.py中有两个条目比较清楚。
url(r'^report/(?P<slug>[\w-]+)/$', views.Report.as_view(), name='report')
url(r'^report/$', views.Report.as_view(), name='report')

关于python - Django反向URL在模板中带有可选参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32184169/

10-12 22:05