在我的django项目中,我有一个简单的网址
url(r'^report/(?P<slug>[\w-]+)/$', views.Report.as_view(), name='report')
我已将此特定网址放在我的应用的网址文件的底部。 slug字段是一个可选参数,可以作为请求的一部分提供,也可以不提供。
现在,在模板中,当我使用此语法{% url 'appname:report' %}
引用此URL时,我发现NoReverseMatch发现错误。我在另一个应用程序中尝试了相同的东西,它工作正常。任何人都可以指出这种行为的可能原因吗?我知道我可以有两个独立的网址,但如果可以使用一个网址,我会更喜欢它。
答案 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' %}