2011-12-25 35 views
19

我只是嘗試了Django,並按照文檔進行身份驗證。django - 沒有反向匹配的登錄視圖

基本上我想看看在用戶登錄表單的頁面,但我得到:

Caught NoReverseMatch while rendering: Reverse for ''django.contrib.auth.views.login'' with arguments '()' and keyword arguments '{}' not found. 

我的urls.py文件:

from django.conf.urls.defaults import patterns, include, url 

urlpatterns = patterns('', 
    url(r'^accounts/login/$', 'django.contrib.auth.views.login'), 
) 

我的settings.py(INSTALLED_APPS)

INSTALLED_APPS = (
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.sites', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
) 

編輯:I R實際上我看着錯誤的東西。

{% if form.errors %} 
<p>Your username and password didn't match. Please try again.</p> 
{% endif %} 

<form method="post" action="{% url 'django.contrib.auth.views.login' %}"> 
{% csrf_token %} 
<table> 
<tr> 
    <td>{{ form.username.label_tag }}</td> 
    <td>{{ form.username }}</td> 
</tr> 
<tr> 
    <td>{{ form.password.label_tag }}</td> 
    <td>{{ form.password }}</td> 
</tr> 
</table> 

<input type="submit" value="login" /> 
<input type="hidden" name="next" value="{{ next }}" /> 
</form> 

具體地爲線:

<form method="post" action="{% url 'django.contrib.auth.views.login' %}"> 

回答

16

試試這個:

<form method="post" action="{% url django.contrib.auth.views.login %}"> 

編輯settings.py Django的文件,這一行:

APPEND_SLASH = False

url(r'^accounts/login$', 'django.contrib.auth.views.login'), 

而且你的編輯後3210會告訴您的反向網址是否以斜線結束。然後

APPEND_SLASH = True 
url(r'^accounts/login/', 'django.contrib.auth.views.login') 

也應該工作。

+0

我正在查看錯誤的文件...檢查編輯 – AlexBrand 2011-12-25 20:57:37

+1

此聲明不正確:根據最新的Django文檔https://docs.djangoproject.com/en/dev/ref/templates/builtins/#url,不應該有單引號。正確的答案是http://stackoverflow.com/a/8631551/781695 – Medorator 2014-04-05 18:26:40

5

嘗試增加名= '登錄' 作爲在礦井URL

url(r'^accounts/login/$', 'django.contrib.auth.views.login', name='login'), 

關鍵字,然後調用反向模板中的文件中出現的錯誤('登錄')。

+1

嘗試訪問本地主機/帳戶/登錄時仍然收到相同的錯誤 – AlexBrand 2011-12-25 17:59:58

+0

我正在查看錯誤的文件...檢查編輯 – AlexBrand 2011-12-25 20:57:58

29

嘗試URL集名稱和URL標記使用它:

url(r'^accounts/login/$', 'django.contrib.auth.views.login', name='login'), 

和模板:

<form method="post" action="{% url 'login' %}"> 
+4

這是我認爲是正確的。其他答案不斷提示引用python包路徑,而不是模板的發佈url中的名稱 – jdi 2011-12-25 21:04:21

+1

這爲我修復了它。謝謝。 – adamek 2013-01-10 17:02:40

+0

它爲我工作。請注意,在asdf_enel_hak答案url正則表達式不以元字符$結束,所以可能是一個安全問題? – viridis 2013-04-07 23:49:11

1

這是在項目/ urls.py命名空間的應用程序的URL做文件。 一種解決方法是刪除命名空間和明確的,但對於這個特定的問題寫出來的每一個網址...

這應該工作:

<form method="post" action="{% url '<namespace_name>:django.contrib.auth.views.login' %}"> 
3

在我看來更好的urls.py文件(乾淨,仍然非常明確),也爲Django 1更新。10將是:

from django.conf.urls import url 
from django.contrib.auth import views as auth_views 

urlpatterns = [ 
    url(r'^accounts/login/$', auth_views.login, name='login') 
] 

而且在模板:

<form method="post" action="{% url 'login' %}"> 

注意url,現在需要一個字符串,所以在模板中的'login'必須在引號。