2011-02-12 77 views
33

我不断收到django登录系统的这个错误。这里是我的urls.py的一部分:NoReverseMatch错误

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

我不明白为什么我收到此错误。如果你需要其他东西,请告诉我。

+1

哪里是你的反向说法? – MattoTodd 2011-02-12 22:48:22

回答

44

您不会显示您想要反转此URL的位置,但看起来您已将其双引号。如果您使用的url标签,注意,你不需要周围的URL名称报价:

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

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

这是教程中的错误吗?正如我刚刚完成的那样。 – Dean 2011-02-12 22:52:45

+1

是的,这在https://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.views.login – 2012-07-21 16:19:42

+6

示例中的教程中似乎存在缺陷。总而言之,Django 1.4不应该有引号,而1.5会需要它们。有关这个问题的其他问题的更多细节:http://stackoverflow.com/questions/10358929/url-gives-me-noreversematch-error-while-reverse-returns-the-url-just-fin – 2012-08-10 10:01:59

6

我想给您的网址名称(为了做到这一点,你需要使用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

19

你看到''the.unknown.view''报告包括了太多qoutes。

这是因为引用语法将在Django 1.5和更高版本中有效。对于Django的1.3或1.4,你应该通过这条线在模板激活未来行为:

{% load url from future %} 

有效期也为Django的1.5。


例为1.5+的Django Django的< = 1.4.x的(没有 “未来” 命令)

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

经典语法是:

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