Comment configurer où rediriger après une déconnexion dans Django?


88

Je me demande simplement où je peux définir l'URL vers laquelle rediriger après la déconnexion. Je sais que vous pouvez définir l'URL de connexion. Je souhaite rediriger vers ma page d'accueil.

Réponses:


156

Modern Django (2017+?) A un paramètre appelé LOGOUT_REDIRECT_URL.

Djangos plus anciens / Réponse originale

Vous n'avez pas besoin d'écraser ou d'encapsuler quoi que ce soit.

Selon la documentation, vous pouvez simplement fournir l' next_pageargument à la vue de déconnexion. 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
Cela ne fonctionne pas si vous avez effectué une importation générique de toutes les URL d'authentification. Plus facile à utiliser la réponse de @ YeRuizhi ci
RunLoop

@RunLoop J'approuve cette autre méthode. Le seul problème est que vous devez vous rappeler de l'utiliser chaque fois que vous créez ledit lien. Donc, si cela fonctionne dans une version standard, c'est plus fiable. Sinon, la prochaine solution la plus simple a du sens.
Yuji 'Tomita' Tomita

Je ne peux pas comprendre comment inverser cette URL de la vue.
meteor

C'est une solution formidable. Je le repousse directement à la page de connexion. Existe-t-il également un moyen d'ajouter un message système via cette ligne? afin de créer un popup? "Vous vous êtes déconnecté avec succès"
arcee123

La barre oblique au début de l'URL de 'page suivante': '/ avec succès_logged_out /' est vitale, sans elle, Django tente de concaténer l'URL de "déconnexion" avec l'URL "avec succès_logged_out", cela crée une nouvelle URL "illégale". Rend la vie un peu difficile si vous souhaitez présenter aux utilisateurs votre page de connexion après leur déconnexion.
Rickka

60

Un moyen plus simple:

Ajoutez le paramètre «suivant» à votre URL de demande de déconnexion. Par exemple:

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

Ensuite, la vue de déconnexion fera l'affaire pour vous.

Pour la redirection après connexion, vous pouvez simplement le définir dans settings.py:

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

35
Bizarre qu'il n'y ait pas qu'une propriété LOGOUT_REDIRECT_URL.
Rob Grant


16
Nous avons 2017 maintenant et LOGOUT_REDIRECT_URL fonctionne réellement :)
m.antkowicz

Bonne réponse. Coller ça dans mon base.htmlet oublier ça. : D (J'utilise Django vintage sur Debian Jessie: S donc les nouveaux paramètres ne sont pas disponibles.)
underscore_d


13

Vous pouvez rediriger l'utilisateur n'importe où en utilisant LOGOUT_REDIRECT_URL dans votre fichier setting.py

LOGOUT_REDIRECT_URL = 'url name to redirect'

9

Rediriger vers la page actuelle

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

Testé dans Django 1.9.

Voir aussi: Est-il possible de passer des paramètres de requête via la balise template {% url%} de Django?


1
Merci, cela m'a aidé au cas où LOGOUT_REDIRECT_URL ne le ferait pas (car j'ai des chemins différents dans l'environnement de test et de production).
Dmytro Gierman


3

À partir de la documentation, vous pouvez écrire votre propre vue de déconnexion (qui peut être simplement un simple wrapper) en remplaçant la page «suivante».


3

Vous pouvez même utiliser des URL nommées pour votre prochain paramètre:

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

3

Si vous souhaitez définir l'URL de redirection au niveau du client, vous pouvez le faire dans urls.py:

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

Et puis dans le modèle:

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

Où le next, vous pointez vers la bonne URL.


1

Si vous avez défini vos propres URL (et non importé des URL d'authentification génériques) et que vous utilisez les vues d'authentification standard de django, vous pouvez simplement les ajouter (template_name = 'example.html') dans le chemin.

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


0

ajoutez ceci dans votre fichier de project setting.py LOGOUT_REDIRECT_URL = '/'

vous pouvez écrire votre URL entre '' J'utilise ma page d'index pour la redirection par défaut de déconnexion

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.