Django logout_then_login无法重定向到正确的登录页面

时间:2013-04-04 11:20:09

标签: django django-authentication

在Django项目中,我的主页视图如下:

@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 /accounts/profile/(而不是正确的主页URL)。我猜我在urls.py做错了什么,但我不确定是什么:

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

我在这里缺少什么?

1 个答案:

答案 0 :(得分:3)

你应该告诉Django在没有收到next参数时应该重定向访问者的位置。这是使用LOGIN_REDIRECT_URL设置完成的,如Django documentation中所述。