我试图理解为什么在尝试使用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')'),
)
我知道我错过了一些明显的东西!
答案 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' %}