Django反向url,模板

时间:2015-08-24 13:58:16

标签: python django django-urls

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

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

我已将此特定网址放在我的应用的网址文件的底部。 slug字段是一个可选参数,可以作为请求的一部分提供,也可以不提供。

现在,在模板中,当我使用此语法{% url 'appname:report' %}引用此URL时,我发现NoReverseMatch发现错误。我在另一个应用程序中尝试了相同的东西,它工作正常。任何人都可以指出这种行为的可能原因吗?我知道我可以有两个独立的网址,但如果可以使用一个网址,我会更喜欢它。

2 个答案:

答案 0 :(得分:4)

您收到错误因为slug是正则表达式中必需的群组。

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')

答案 1 :(得分:1)

您不需要提及应用名称。 命名网址用于区分不同应用之间的网址。 试试

{% url 'report' %}