如何配置在Django中注销后重定向到哪里?

Posted

技术标签:

【中文标题】如何配置在Django中注销后重定向到哪里?【英文标题】:How to configure where to redirect after a log out in Django? 【发布时间】:2011-07-15 23:10:18 【问题描述】:

只是想知道我可以在哪里设置 url 以在注销后重定向到。我知道你可以设置登录网址。我想重定向到我的主页。

【问题讨论】:

【参考方案1】:

在您的项目 setting.py 文件中添加以下行:

ACCOUNT_LOGOUT_REDIRECT_URL = '/'

【讨论】:

【参考方案2】:

在你的项目 setting.py 文件中添加这个 LOGOUT_REDIRECT_URL = '/'

您可以在 '' 之间写下您的网址 我使用我的索引页面进行注销默认重定向

【讨论】:

【参考方案3】:

如果您定义了自己的 url(而不是导入的通用 auth url)并且正在使用标准的 django auth 视图,您可以简单地在路径中添加 (template_name='example.html')。

path('logout/',auth_views.LogoutView.as_view(template_name='homepage.html'),name="logout")

【讨论】:

【参考方案4】:

现代 Django (2017+?) 有一个名为 LOGOUT_REDIRECT_URL 的设置。

老 Django / 原始答案

您无需覆盖或包装任何内容。

根据文档,您可以将 next_page 参数提供给注销视图。 https://docs.djangoproject.com/en/dev/topics/auth/default/#django.contrib.auth.views.logout

(r'^logout/$', 'django.contrib.auth.views.logout',
                          'next_page': '/successfully_logged_out/')

【讨论】:

如果您已对所有身份验证 URL 进行了通用导入,这将不起作用。更容易使用下面@YeRuizhi的答案 @RunLoop 我赞成这种其他方法。唯一的问题是您必须记住每次构建所述链接时都使用它。因此,如果这在标准构建中有效,它会更可靠。如果不是,那么下一个最简单的解决方案是有意义的。 我无法理解如何从视图中反转此网址。 这是一个很棒的解决方案。我将其推回登录页面。有没有办法通过这条线添加系统消息?以便创建一个弹出窗口? “您已成功退出” 'next page' URL 开头的正斜杠:'/successfully_logged_out/' 至关重要,没有它,Django 会尝试将“logout” URL 与“successfully_logged_out” URL 连接起来,这会创建一个新的“非法”网址。如果您想在用户注销后向他们展示您的登录页面,这会让生活变得有点困难。【参考方案5】:

您可以在 setting.py 文件中使用 LOGOUT_REDIRECT_URL 将用户重定向到任何地方

LOGOUT_REDIRECT_URL = 'url name to redirect'

【讨论】:

【参考方案6】:

重定向到当前页面

<a href="% url 'logout' %?next= request.path | urlencode ">% trans "Logout" %</a>

在 Django 1.9 中测试。

另请参阅:Is it possible to pass query parameters via Django's % url % template tag?

【讨论】:

谢谢,这对我有帮助,以防 LOGOUT_REDIRECT_URL 没有(因为我在测试和生产环境中有不同的路径)。【参考方案7】:

从 Django 1.10 开始,你可以定义一个LOGOUT_REDIRECT_URL (see the docs)

【讨论】:

【参考方案8】:

如果你想在客户端设置重定向 URL,你可以在urls.py:

(r'^management/logout/$', 'django.contrib.auth.views.logout'),

然后在模板中:

<a href="% url 'django.contrib.auth.views.logout' %?next=/">
    Log out
</a>

next 所在的地方,你指向正确的 URL。

【讨论】:

【参考方案9】:

您甚至可以为下一个参数使用命名网址:

<a href="% url 'auth_logout' %?next=% url 'homepage' %"> Logout</a>

【讨论】:

【参考方案10】:

一种更简单的方法:

将“下一个”参数添加到您的注销请求网址。例如:

<a href="% url 'auth_logout' %?next=/path_to_the_page"> Logout</a>

然后注销视图将为您解决问题。

登录后重定向,只需在settings.py中设置即可:

LOGIN_REDIRECT_URL = '/path_to_the_page'
LOGIN_URL = '/path_to_the_page'

【讨论】:

奇怪的是不只是一个 LOGOUT_REDIRECT_URL 属性。 即将推出...docs.djangoproject.com/en/dev/ref/settings/… 我们现在有 2017 年,LOGOUT_REDIRECT_URL 确实有效 :) 好答案。把它贴在我的base.html 中并忘记它。 :D(我在 Debian Jessie 上使用老式 Django :S 所以新设置不可用。)【参考方案11】:

在您的注销视图中,在您永久注销用户后,返回 HttpResponseRedirect(url)。请see here for more details。

【讨论】:

【参考方案12】:

从docs,您可以编写自己的注销视图(可以只是简单的包装器)覆盖“下一页”页面。

【讨论】:

以上是关于如何配置在Django中注销后重定向到哪里?的主要内容,如果未能解决你的问题,请参考以下文章

如何覆盖注销后重定向网址

如何在 Django 2 中的 POST 方法后重定向到成功

如果查询匹配,则使用 Django 在 Ajax 调用后重定向

Vue如何在登录后重定向用户到主要组件

注销后如何停止 Symfony 重定向

登录 Django 后重定向到 Next