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.

DJ.MaSs
fonte

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/'})
Yuji 'Tomita' Tomita
fonte
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'
YeRuizhi
fonte
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'
SACHIN CHAVAN
fonte
9

Redirecionar para a página atual

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

Testado em Django 1.9.

Veja também: É possível passar parâmetros de consulta por meio da tag de modelo {% url%} do Django?

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
fonte
1
Obrigado, isso me ajudou no caso, quando LOGOUT_REDIRECT_URL não (porque eu tenho caminhos diferentes no ambiente de teste e produção).
Dmytro Gierman
4

Em sua visualização de logout, após efetuar o logout do usuário definitivamente, retorne HttpResponseRedirect (url). Por favor, veja aqui para mais detalhes .

Ke Sun
fonte
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'.

Don
fonte
3

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

<a href="{% url 'auth_logout' %}?next={% url 'homepage' %}"> Logout</a>
blueFast
fonte
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.

Menda
fonte
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")

Dcode22
fonte
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

Emad Mohammadpoor
fonte