当登录URL以Django中的?next = / accounts / logout /结尾时,停止重定向返回注销

时间:2012-03-30 03:50:47

标签: django django-templates django-authentication

在我的模板中,我目前正在使用next参数将用户重定向到登录页面之前的页面:

<a href="{% url auth_login %}?next={% firstof request.path '/' %}">Log in</a>

firstof代码确保request.path无效,然后重定向回根网址。

这适用于除一个页面之外的每个页面:注销页面。如果我想切换用户,那么我会先注销,然后点击登录。但是我的网址将是

http://127.0.0.1:8000/accounts/login/?next=/accounts/logout/

因此,只要我登录,我就会立即重新登录。如何使用类似伪代码修改模板:

if request.path and request.path != reverse( 'auth_logout' )
    return request.path

return "/"

1 个答案:

答案 0 :(得分:2)

我能想到的最简单的解决方案是将“next = /”添加到您的注销网址,这样,只要用户注销,他就会立即重定向到指定的网址url,所以在退出时没有人会留在退出页面。

否则你将不得不重写登录视图并添加你需要的任何自定义逻辑,如果contrib.auth视图是类视图,这将更容易,它们目前不是很不幸。

所以复制粘贴并修改:)(我知道复制粘贴很糟糕,但这是你可以添加自定义行为的唯一方法)。

该视图位于此处: https://code.djangoproject.com/browser/django/trunk/django/contrib/auth/views.py#L25