将字符串传递给模板

时间:2015-08-19 15:03:01

标签: python django django-templates django-urls

我认为这可能非常简单,但我无法弄清楚为什么这些网址不匹配。

我的模板代码如下所示:

<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>(.*))/)?$']

2 个答案:

答案 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'),