8

当前遭受 Django URL 标记的 NoReverseMatch 错误。一直在关注 Django 的权威指南,Django 文档,并在此处和互联网上搜索

网址:

url(r'^test/', Search_Page),
url(r'^search/', Search),
url(r'^details/', Details_Main),
url(r'^Link/(d+)/$', Link),
url(r'^$', 'Parks.views.Link', name="home"),
url(r'^(?P<result_name>)/$', Link),

观点:

def Link(request, result_name):
    return render_to_response('Search_Page.html')

模板:

{% for result in results %}
    <a href="{% url name result.name %}">test</a>

错误:

NoReverseMatch at /search/
Reverse for 'name' with arguments '(u'North West Thrill Centre',)' and keyword arguments '{}' not found.Request Method: GET 
Request URL: http://127.0.0.1:8000/search/?search=a&type=parks&submit=Search 
Django Version: 1.4.2 
Exception Type: NoReverseMatch 
Exception Value: Reverse for 'name' with arguments '(u'North West Thrill Centre',)' and keyword arguments '{}' not found. 
Exception Location: C:\Python27\lib\site-packages\django\template\defaulttags.py in render, line 424 
Python Executable: C:\Python27\python.exe 
Python Version: 2.7.3 
Python Path: ['C:\\Users\\User\\Documents\\Django\\ParkManager',
 'C:\\Windows\\system32\\python27.zip',
 'C:\\Python27\\DLLs',
 'C:\\Python27\\lib',
 'C:\\Python27\\lib\\plat-win',
 'C:\\Python27\\lib\\lib-tk',
 'C:\\Python27',
 'C:\\Python27\\lib\\site-packages'] 
Server time: Mon, 4 Feb 2013 16:44:27 +0000 

Error during template rendering
In template C:\Users\User\Documents\Django\ParkManager\Templates\Details_Main.html, error at line 23

提前致谢

4

2 回答 2

8

你试图调用什么视图?您正在调用name视图上的 URL,但该 URLname不存在。由于您只有一个命名视图,因此home我假设这是您尝试使用的视图。

您的视图和 URL 都没有参数,但您result.name在 URL 中作为参数传递。

您需要接受视图中的参数def Link(request, result_name):并通过正则表达式将其捕获到您的 URL 中(?P<result_name>..,或者在没有传递参数的情况下调用您的 URL:

{% for result in results %}
    <a href="{% url home %}">test</a>

由于您的视图中还没有逻辑,并且正在传递一个多字参数而不是“slugifying”它 - 我假设您想要执行后者并且只需从 URL 调用中删除参数。

于 2013-02-04T16:55:12.743 回答
1

您的 {% url name result.name %} 是问题所在。

由于您的 Link 方法有一个关键字参数,因此您的 url 反向模板标签应该有一个匹配的关键字参数。

模板.html

<a href="{% url search result_name=result.name %}">test</a>

继续阅读以明确问题所在,正如您现在设置的那样,在模板中反转 url 的正确方法是:
{% url [name] [args] [kwargs] %}

其中,
[name] 是以下之一:test、search_start、details、link、home 或 search。或者查看功能的完整路径,但我建议现在保持简单。
[args] 可以是空的,也可以是参数列表。
[kwargs] 可以是空的,也可以是关键字参数列表。

可以在此处找到 url 标签上的文档并概述其他使用方法(https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#url)。

*顺便说一句,您将遇到搜索字符串中允许的 url 中不允许使用的字符(如空格和 & 符号)的问题。

网址.py

url(r'^test/', Search_Page, name="test"),
url(r'^search/', Search, name="search_start"),
url(r'^details/', Details_Main, name="details"),
url(r'^Link/(d+)/$', Link, name="link"),
url(r'^$', 'Parks.views.Link', name="home"),
url(r'^(?P<result_name>)/$', Link, name="search"),

another_template.html

<a href="{% url search result_name=result.name %}">test</a>
<!-- and more examples -->
<a href="{% url test %}">link to test</a>  
<a href="{% url search_start %}">link to search</a> 
<a href="{% url details %}">link to details</a> 
{% for a_link in links %}
    <a href="{% url link a_link.id %}">link to details (of a_link)</a> 
{% endfor %}
<a href="{% url home %}">home</a> 
于 2013-02-04T18:43:01.967 回答