2013-04-04 40 views
1

在Django項目,我的主頁查看如下:Django的logout_then_login無法重定向到正確的登錄頁面

@login_required 
def home(request): 
    return render(request, 'home.html') 

所以,當有人試圖訪問網頁,它們會自動採取的登錄表單。如果沒有人登錄下面這個表格,直接從Django文檔:

{% extends "base.html" %} 

{% block content %} 

{% 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> 

{% endblock %} 

一旦有人登錄到形式,它們會採取它看起來像這樣的網頁:

{% extends "base.html" %} 

{% block content %} 

<form method="post" action="{% url django.contrib.auth.views.logout_then_login %}"> 
{% csrf_token %} 
<input type="submit" value="logout" /> 
</form> 

<h1>Home Page</h1> 

{% endblock %} 

正如您所看到的,我試圖創建一個註銷按鈕,將用戶權限返回到登錄頁面。不過,我注意到,當第一次到達登錄頁面時,URL以?next=/結尾,而當我「註銷」時,我帶到的「登錄」頁面有一個缺少?next=/的URL。當我嘗試使用該頁面登錄時,我被髮送到URL /accounts/profile/(而不是正確的主頁URL),該URL不存在。我猜我做錯了什麼在urls.py,但我不知道是什麼:

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

缺少什麼我在這裏?

回答

3

你應該告訴Django它應該在什麼地方重定向訪問者,當它沒有收到next參數。這是通過LOGIN_REDIRECT_URL設置完成的,如Django documentation中所述。

+1

謝謝你,你的回答幫助我認識到,註銷登錄頁面後(而不是通過'@ login_required'裝飾器重定向),Django不再有'next'參數帶我去。所以我設置了'LOGIN_REDIRECT_URL =「/」'(回到主頁),現在它工作正常。 – GChorn 2013-04-04 11:42:49