Django reverse url 在模板中使用可选参数
Django reverse url with optional arguments in template
在我的 django 项目中,我有一个简单的 url
url(r'^report/(?P<slug>[\w-]+)/$', views.Report.as_view(), name='report')
我已将这个特定的 url 放在应用程序 url 文件的底部。 slug 字段是一个可选参数,它可能会或可能不会作为请求的一部分提供。
现在,在模板中,当我使用此语法 {% url 'appname:report' %}
引用此 url 时,我收到 NoReverseMatch found 错误。我在另一个应用程序中尝试过同样的事情,它工作正常。任何人都可以指出这种行为的可能原因吗?我知道我可以有两个单独的 url,但如果可以用一个来完成,我会更喜欢它。
您无需提及应用名称。
命名 url 用于在不同的应用程序之间区分 url。
尝试
{% url 'report' %}
您收到错误消息是因为 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')
在我的 django 项目中,我有一个简单的 url
url(r'^report/(?P<slug>[\w-]+)/$', views.Report.as_view(), name='report')
我已将这个特定的 url 放在应用程序 url 文件的底部。 slug 字段是一个可选参数,它可能会或可能不会作为请求的一部分提供。
现在,在模板中,当我使用此语法 {% url 'appname:report' %}
引用此 url 时,我收到 NoReverseMatch found 错误。我在另一个应用程序中尝试过同样的事情,它工作正常。任何人都可以指出这种行为的可能原因吗?我知道我可以有两个单独的 url,但如果可以用一个来完成,我会更喜欢它。
您无需提及应用名称。 命名 url 用于在不同的应用程序之间区分 url。 尝试
{% url 'report' %}
您收到错误消息是因为 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')