Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将字符串传递到模板中的Django URL_Python_Django_Django Templates_Django Urls - Fatal编程技术网

Python 将字符串传递到模板中的Django URL

Python 将字符串传递到模板中的Django URL,python,django,django-templates,django-urls,Python,Django,Django Templates,Django Urls,我认为这可能很简单,但我一辈子都不明白为什么这些URL不匹配 我的模板代码如下所示: <form action="{% url 'view_record' "facility_report" %}" method="post"> {% csrf_token %} {{ form }} <input type="submit" value="View Report" name='view' label="Submit"> </form> <form

我认为这可能很简单,但我一辈子都不明白为什么这些URL不匹配

我的模板代码如下所示:

<form action="{% url 'view_record' "facility_report" %}" method="post">
{% csrf_token %}

{{ form }}

<input type="submit" value="View Report" name='view' label="Submit">  </form>
<form action="{%url 'view_record' 'facility_report'%}" method="post">

{%csrf_令牌%}
{{form}}
然后,url应该与我的url配置中的这一行匹配:

url(r'^view_record/((?P<report_type>.+)/)?$', views.view_record, name='view_record'),
url(r'^view\u record/(?P.+)/)?$,views.view\u record,name='view\u 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>(.*))/)?$']
异常类型:NoReverseMatch at/view\u记录/
异常值:找不到参数为“('facility_report',)”且关键字参数为“{}”的“view_record”的相反值。尝试了1个模式:[“查看记录/(?P(.*)/)?$”

您可以执行以下操作:

<form action="{% url 'view_record' "facility_report" %}" method="post">
{% csrf_token %}

{{ form }}

<input type="submit" value="View Report" name='view' label="Submit">  </form>
<form action="{%url 'view_record' 'facility_report'%}" method="post">
这会将表单发送到正确的url。

(?p.+)/)?
中的外部组是一个捕获组。Django的url反转无法处理嵌套的捕获组,因此它将只捕获外部组作为可能的参数。由于第一个参数不是以
/
结尾,因此模式不匹配,将抛出
NoReverseMatch

您可以将外部组更改为非捕获组,Django将选择内部组作为捕获组。这样,参数就不必包含
/
,因为只替换内部组,而按原样使用外部组

要创建非捕获组,请使用
?:
启动该组:

url(r'^view_record/(?:(?P<report_type>.+)/)?$', views.view_record, name='view_record'),
url(r'^view\u record/(?:(?P.+)/)?$”,views.view\u record,name='view\u record'),

能否显示views.py文件?回溯说明了什么?这是一个反向url匹配错误,在尝试发布的url后无法匹配“('facility_record')”。我将立即发布准确的日志并查看。好的,添加了错误消息。该视图实际上相当大,据我所知与错误无关。你能告诉我你在视图中传递的是什么论点吗?如果可能,我正在尝试避免硬编码url。更新了答案。这个问题可能是由于引用。希望这能解决你的问题。它一直给我和以前一样的错误。这似乎是正确的格式,但我真的很困惑,为什么它不匹配。