Como configurar para onde redirecionar após um logout no Django?


88

Gostaria de saber onde posso definir o URL para redirecionar após o logout. Eu sei que você pode definir o url de login. Eu quero redirecionar para minha página inicial.

Respostas:


156

Django moderno (2017+?) Tem uma configuração chamada LOGOUT_REDIRECT_URL.

Djangos mais antigos / resposta original

Você não precisa substituir ou embrulhar nada.

De acordo com a documentação, você pode apenas fornecer o next_pageargumento para a visualização de logout. 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
Isso não funciona se você tiver feito uma importação genérica de todos os urls de autenticação. Mais fácil de usar a resposta de @YeRuizhi abaixo
RunLoop de

@RunLoop Eu aprovo esse outro método. O único problema é que você deve se lembrar de usá-lo toda vez que construir o referido link. Portanto, se isso funcionar em uma construção padrão, é mais confiável. Caso contrário, a próxima solução mais fácil faz sentido.
Yuji 'Tomita' Tomita

Eu não consigo entender como reverter este url de vista.
meteoro

Esta é uma solução incrível. Estou empurrando de volta para a página de login. Existe uma maneira de adicionar uma mensagem do sistema por meio dessa linha também? para criar um pop-up? "Você se desconectou com sucesso"
arcee123

A barra no início da URL da 'próxima página': '/ success_logged_out /' é vital, sem ela, o Django tenta concatenar a URL de "logout" com a URL "success_logged_out", isso cria uma nova URL 'ilegal'. Torna a vida um pouco difícil se você deseja apresentar aos usuários sua página de login após o logout.
Rickka

60

Uma maneira mais fácil:

Adicione o parâmetro 'próximo' ao seu URL de solicitação de logout. Por exemplo:

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

Então, a visualização de logout fará o truque para você.

Para redirecionamento pós-login, você pode simplesmente defini-lo em settings.py:

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

35
Estranho que não haja apenas uma propriedade LOGOUT_REDIRECT_URL.
Rob Grant


16
Temos 2017 agora e LOGOUT_REDIRECT_URL está realmente funcionando :)
m.antkowicz

Boa resposta. Enfiar isso na minha base.htmlcara e me esquecer disso. : D (Estou usando Django vintage no Debian Jessie: S, então as novas configurações não estão disponíveis.)
underscore_d


13

Você pode redirecionar o usuário para qualquer lugar usando LOGOUT_REDIRECT_URL em seu arquivo setting.py

LOGOUT_REDIRECT_URL = 'url name to redirect'



3

Nos documentos, você pode escrever sua própria visão de logout (que pode ser apenas um invólucro simples) sobrescrevendo a página 'seguinte'.


3

Você pode até usar urls nomeados para seu próximo parâmetro:

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

3

Se você deseja definir o URL de redirecionamento no nível do cliente, pode fazê-lo em urls.py:

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

E então no modelo:

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

Onde o next, você aponta para o URL correto.


1

Se você definiu seus próprios urls (e não importou urls de autenticação genéricos) e está usando as visualizações de autenticação django padrão, você pode simplesmente adicioná-los (template_name = 'example.html') no caminho.

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


0

adicione isso no arquivo setting.py do seu projeto LOGOUT_REDIRECT_URL = '/'

você pode escrever o seu URL entre '' Eu uso minha página de índice para redirecionamento padrão de logout

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.