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