2011-02-12 105 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 %}