NoReverseMatch Django URL

时间:2013-02-04 16:49:55

标签: django django-templates

目前,Django网址标记出现NoReverseMatch错误。 一直在关注Django的权威指南,Django doucmentation并在这里和互联网搜索

网址:

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

提前致谢

2 个答案:

答案 0 :(得分:6)

你试图打电话给什么观点?您正在调用name视图中的网址,但name不存在。由于您只有一个命名视图home,我将假设您正在尝试使用该视图。

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

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

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

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

答案 1 :(得分:0)

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

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

template.html

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

继续阅读以明确问题是什么,正如您现在设置的那样,在模板中反转网址的正确方法是:     {%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)。

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

urls.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>