2013-04-04 41 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