我认为这可能非常简单,但我无法弄清楚为什么这些网址不匹配。
我的模板代码如下所示:
<form action="{% url 'view_record' "facility_report" %}" method="post">
{% csrf_token %}
{{ form }}
<input type="submit" value="View Report" name='view' label="Submit"> </form>
然后该网址应与我的网址中的这一行匹配:
url(r'^view_record/((?P<report_type>.+)/)?$', views.view_record, name='view_record'),
我在这里缺少什么?它们根本无法匹配,而且大多数其他问题都来自五年前,当时引擎似乎对格式化更加挑剔。
Exception Type: NoReverseMatch at /view_record/
Exception Value: Reverse for 'view_record' with arguments '('facility_report',)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['view_record/((?P<report_type>(.*))/)?$']
答案 0 :(得分:0)
您可以这样做:
<form action="{%url 'view_record' 'facility_report'%}" method="post">
在您的urls.py
:
url(r'^view_record/(?P<report_type>(.*))/$', views.view_record, name='view_record')
这应该将表单发送到正确的URL。
答案 1 :(得分:0)
((?P<report_type>.+)/)?
中的外部组是一个捕获组。 Django的url反转无法处理嵌套捕获组,因此它只会捕获外部组作为可能的参数。由于第一个参数不以/
结尾,因此模式不匹配并抛出NoReverseMatch
。
您可以将外部组更改为非捕获组,Django将拾取内部组作为捕获组。这样,参数不必包含/
,因为只替换内部组,并且外部组按原样使用。
要创建非捕获组,请使用?:
:
url(r'^view_record/(?:(?P<report_type>.+)/)?$', views.view_record, name='view_record'),