Come configurare dove reindirizzare dopo un logout in Django?


90

Mi chiedo solo dove posso impostare l'URL a cui reindirizzare dopo il logout. So che puoi impostare l'URL di accesso. Voglio reindirizzare alla mia home page.

Risposte:


156

Modern Django (2017+?) Ha un'impostazione chiamata LOGOUT_REDIRECT_URL.

Djangos più vecchi / risposta originale

Non è necessario sovrascrivere o avvolgere nulla.

Secondo i documenti, puoi semplicemente fornire l' next_pageargomento alla vista di 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
Questo non funziona se hai effettuato un'importazione generica di tutti gli URL di autenticazione. Più facile da usare la risposta di @ YeRuizhi di seguito
RunLoop

@ RunLoop Approvo questo altro metodo. L'unico problema è che devi ricordarti di usarlo ogni volta che crei detto collegamento. Quindi, se funziona in una build standard, è più affidabile. In caso contrario, la prossima soluzione più semplice ha senso.
Yuji 'Tomita' Tomita

non riesco a capire come invertire questo URL dalla visualizzazione.
meteora

Questa è una soluzione fantastica. Lo spingo indietro alla pagina di accesso. C'è un modo per aggiungere anche un messaggio di sistema tramite questa riga? così da creare un popup? "Ti sei disconnesso con successo"
arcee123

La barra all'inizio dell'URL "pagina successiva": "/ success_logged_out /" è vitale, senza di essa, Django tenta di concatenare l'URL "logout" con l'URL "success_logged_out", questo crea un nuovo URL "illegale". Rende la vita un po 'difficile se vuoi presentare agli utenti la tua pagina di accesso dopo che si sono scollegati.
Rickka

62

Un modo più semplice:

Aggiungi il parametro "successivo" all'URL della richiesta di disconnessione. Per esempio:

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

Quindi la vista di disconnessione farà il trucco per te.

Per il reindirizzamento dopo il login, puoi semplicemente impostarlo in settings.py:

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

35
Strano che non ci sia solo una proprietà LOGOUT_REDIRECT_URL.
Rob Grant


16
Abbiamo il 2017 ora e LOGOUT_REDIRECT_URL funziona davvero :)
m.antkowicz

Buona risposta. Attaccare questo nel mio base.htmle dimenticarlo. : D (Sto usando Django vintage su Debian Jessie: S quindi le nuove impostazioni non sono disponibili.)
underscore_d


14

Puoi reindirizzare l'utente ovunque utilizzando LOGOUT_REDIRECT_URL nel tuo file setting.py

LOGOUT_REDIRECT_URL = 'url name to redirect'



4

Puoi persino utilizzare URL con nome per il tuo prossimo parametro:

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

3

Dai documenti puoi scrivere la tua vista di logout (che può essere solo un semplice wrapper) sovrascrivendo la pagina "successiva".


3

Se vuoi impostare l'URL di reindirizzamento a livello di client, puoi farlo in urls.py:

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

E poi nel modello:

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

Dove next, punti all'URL corretto.


1

Se hai definito i tuoi URL (e non gli URL di autenticazione generici importati) e stai utilizzando le viste di autenticazione django standard, puoi semplicemente aggiungerli (template_name = 'example.html') nel percorso.

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


0

aggiungilo nel file setting.py del progetto LOGOUT_REDIRECT_URL = '/'

puoi scrivere il tuo URL tra "" Uso la mia pagina indice per il reindirizzamento predefinito di logout

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.