在Django中注销后,如何配置重定向到的位置?


88

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

Answers:


156

现代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/'})

5
如果已完成所有身份验证URL的常规导入,则此方法将无效。下面的@YeRuizhi答案更易于使用
RunLoop 2015年

@RunLoop我赞成这种其他方法。唯一的问题是,您必须记住每次构建所述链接时都要使用它。因此,如果这在标准版本中有效,那么它会更可靠。如果没有,那么下一个最简单的解决方案就有意义。
Yuji'Tomita'Tomita 2015年

我不能理解如何从视图中反向此URL。
流星

这是一个很棒的解决方案。我正将其推回登录页面。有没有办法通过此行添加系统消息?以便创建一个弹出窗口?“您已成功注销”
arcee123

“下一页” URL开头的正斜杠是至关重要的:“ / successfully_logged_out /”,如果没有它,Django会尝试将“注销” URL与“ successfully_logged_out” URL连接起来,这将创建一个新的“非法” URL。如果要在用户注销后向他们显示登录页面,将使生活变得有些困难。
卡(Rickka)2016年

60

一种更简单的方法:

在您的注销请求网址中添加“ next”参数。例如:

<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'

35
奇怪的是,不仅有LOGOUT_REDIRECT_URL属性。
罗伯·格兰特


16
我们现在有2017年,LOGOUT_REDIRECT_URL实际上正在工作:)
m.antkowicz

好答案。将此留在我的手中,base.html然后忘记它。:D(我在Debian Jessie:S上使用老式的Django,所以新设置不可用。)
underscore_d


13

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

LOGOUT_REDIRECT_URL = 'url name to redirect'



3

文档中,您可以编写自己的退出视图(可以只是简单的包装器)来覆盖“下一页”页面。


3

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

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

3

如果要在客户端级别设置重定向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。


1

如果您定义了自己的网址(而不是导入的通用身份验证网址),并且使用的是标准django身份验证视图,则只需在路径中添加(template_name ='example.html')。

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.