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



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

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

firstof标记确保在request.path无效的情况下,它将重定向回根URL。

这在除注销页面之外的每一个页面上都能很好地工作。如果我想切换用户,我会先注销,然后点击登录。但我的网址会是

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

因此,我一登录,就会立即再次注销。我该如何修改模板,以便使用类似于以下伪代码的东西:

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

我能想到的最简单的解决方案是将"?next=/"添加到您的注销url中,这样,用户一注销,就会立即重定向到指定的url,因此在注销时,任何人都不会停留在注销页面上。

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

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

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

相关内容

  • 没有找到相关文章

最新更新