在我的模板中,我目前正在使用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