【问题标题】:NoReverseMatch Django URLNoReverseMatch Django URL
【发布时间】:2013-01-19 10:15:17
【问题描述】:

目前正遭受 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

提前致谢

【问题讨论】:

    标签: django django-templates


    【解决方案1】:

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

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

    您需要通过def Link(request, result_name): 在您的视图中接受一个参数并通过带有(?P&lt;result_name&gt;.. 的正则表达式在您的URL 中捕获它,或者在没有传递参数的情况下调用您的URL:

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

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

    【讨论】:

    • 当我删除后面的部分时,网址直接转到 127.0.0.1/8000(没有任何结尾)更新帖子以匹配我修改后的代码......仍然没有运气
    • 您正在将 URL 传递给 name 视图。此视图的 URL 是 127.0.0.1/8000,因此它正在按照您的要求进行操作。您添加的新 URL 不正确。它需要在(?P&lt;result_name&gt;) 之后使用regex 来捕获您正在传递的变量,但是您正在传递一个多字变量并且需要将其组合起来——这称为slug。你检查过 Django 教程吗?我强烈建议您首先检查一下。 docs.djangoproject.com/en/1.4/intro/tutorial01
    • 我已经阅读了有关 URL 标签的文档,但没有帮助。但是,在再次查看您的答案后,它对我有用,代码现在显示为:测试 谢谢 :D
    【解决方案2】:

    您的 {% 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 中不允许的字符,例如空格和 & 符号。

    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"),
    

    另一个模板.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> 
    

    【讨论】:

    • 感谢您的详细回复。不幸的是,它没有用。但是,我通读了在线文档并找到了一种无需 url 标签即可获得所需结果的方法。我的模板现在显示为:test,这似乎工作正常
    • 以这种方式创建 url 的形式不合适(以一种微妙的方式违反了 DRY 原则)。我建议让 url 反向器工作以安抚 django 之神。使用 {% url link a_link.id %} 时出现什么错误?
    猜你喜欢
    • 2013-09-26
    • 2015-07-18
    • 1970-01-01
    • 2017-03-14
    • 2016-06-04
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2018-12-17
    相关资源
    最近更新 更多