NoReverseMatch at / index

时间:2015-11-22 21:27:19

标签: django django-urls

我试图理解为什么在尝试使用Django Contact Form时看到NoReverseMatch错误。

使用以下语法向index.html添加链接时发生错误:

<h3><a href="{% url 'contact' %}">Contact</a></h3>

如果我使用以下硬编码语法,则不会发生错误,并且index.html中联系表单的链接按预期工作。

<h3><a href="contact">Contact</a></h3>

我想要实现的内容类似于Django关于removing hard coded urls的教程。

我看到的完整错误是:

  

/ index

的NoReverseMatch      

反向联系&#39;参数&#39;()&#39;和关键字参数&#39; {}&#39;   未找到。尝试了0种模式:[]

如果需要,我的缩写urls.py是:

 urlpatterns = patterns('',
    ...
    url(r'index$', views.index, name='index'),
    ...
    url(r'^contact/', include('contact_form.urls')'),
 )

我知道我错过了一些明显的东西!

2 个答案:

答案 0 :(得分:2)

这是因为没有名称为contact的网址。

url(r'^contact/', include('contact_form.urls')'),

是将所有以contact开头的网址映射到contact_form.urls的网址。官方文档没有说明如何访问contact视图,但基本了解django我们可以做这样的事情:

 urlpatterns = patterns('',
    ...
    url(r'index$', views.index, name='index'),
    ...
    url(r'^contact/', include('contact_form.urls', namespace='contacts')),
 )

和模板中的内容:

<h3><a href="{% url 'contacts:contact_form' %}">Contact</a></h3>

contact_form网址名称位于source code of the module

答案 1 :(得分:2)

在模板中使用{%url'联系'%}时,'contact'实际上是路由的名称。在您的网址模式中,没有具有此名称的路由。你应该在你的contact_forms.urls.py中包含这样的东西:

url(r'$', views.index, name='contact_index')

此外,您应将“contact /”模式更改为:

url(r'^contact/', include('contact_form.urls', namespace='contacts'))

然后在模板中创建链接时使用它:

{% url 'contacts:contact_index' %}