NoReverseMatch错误

时间:2011-02-12 22:25:00

标签: django django-authentication

我一直在为django登录系统收到此错误。这是我的urls.py的一部分:

     (r'^contractManagement/login', 'django.contrib.auth.views.login', {'template_name': 'login.html'}),

我得到的确切错误:

Exception Type: NoReverseMatch
Exception Value:    Reverse for ''django.contrib.auth.views.login'' with arguments '()' and keyword arguments '{}' not found.

我无法理解为什么我会收到此错误。如果您还需要其他信息,请告诉我。

3 个答案:

答案 0 :(得分:44)

您没有显示您尝试撤消此网址的位置,但看起来您已对其进行双重引用。如果您使用的是url代码,请注意您的网址名称周围不需要引号:

{% url django.contrib.auth.views.login %}

{% url 'django.contrib.auth.views.login' %}

答案 1 :(得分:19)

您会看到报告的''the.unknown.view''包含太多qoutes。

这是因为引用语法在Django 1.5及更高版本中有效。对于Django 1.3或1.4,您应该在模板中通过以下行激活未来行为:

{% load url from future %}

也适用于Django 1.5。


Django 1.5 +的示例

{% url "path.to.some.view" %}

Django< = 1.4.x(没有“future”命令)的经典语法是:

{% url path.to.some.view %}

答案 2 :(得分:6)

我会给你的url一个名字(为了做到这一点,你需要使用url方法)另外你应该为你的所有url添加一个尾部斜杠,因为django CommonMiddleware将会进行302重定向如果你不这样做,你的所有网址都是:

from django.conf.urls.defaults import *

urlpatterns = patterns('',
     url(r'^contractManagement/login/', 'django.contrib.auth.views.login', {'template_name': 'login.html'}, name='contract_login'),

)

然后您可以在代码中使用reverse,或者在模板中使用url,如果您决定更改实际URL(即:changedCotractManagement / login /),只要名称相同,您的代码仍然会好。

代码:

from django.core.urlresolvers import reverse
reverse('contract_login')
模板中的

{% url contract_login %}
每个MrOodles

编辑