Wie konfiguriere ich, wo nach einer Abmeldung in Django umgeleitet werden soll?

83

Ich frage mich nur, wo ich die URL einstellen kann, zu der nach dem Abmelden umgeleitet werden soll. Ich weiß, dass Sie die Login-URL einstellen können. Ich möchte zu meiner Homepage weiterleiten.

DJ.MaSs
quelle

Antworten:

151

Modern Django (2017+?) Hat eine Einstellung namens LOGOUT_REDIRECT_URL.

Ältere Djangos / Originalantwort

Sie müssen nichts überschreiben oder einwickeln.

Gemäß den Dokumenten können Sie das next_pageArgument einfach in die Abmeldeansicht eingeben. https://docs.djangoproject.com/de/dev/topics/auth/default/#django.contrib.auth.views.logout

(r'^logout/$', 'django.contrib.auth.views.logout',
                          {'next_page': '/successfully_logged_out/'})
Yuji 'Tomita' Tomita
quelle
4
Dies funktioniert nicht, wenn Sie alle Authentifizierungs-URLs generisch importiert haben. Einfacher zu verwenden @ YeRuizhi Antwort unten
RunLoop
@ RunLoop Ich bin mit dieser anderen Methode einverstanden. Das einzige Problem ist, dass Sie daran denken müssen, es jedes Mal zu verwenden, wenn Sie diesen Link erstellen. Wenn dies in einem Standard-Build funktioniert, ist es zuverlässiger. Wenn nicht, ist die nächst einfachere Lösung sinnvoll.
Yuji 'Tomita' Tomita
Ich kann nicht verstehen, wie man diese URL aus der Ansicht umkehrt.
Meteor
Dies ist eine großartige Lösung. Ich schiebe es direkt zurück zur Anmeldeseite. Gibt es eine Möglichkeit, über diese Zeile auch eine Systemnachricht hinzuzufügen? um ein Popup zu erstellen? "Sie haben sich erfolgreich abgemeldet"
arcee123
Der Schrägstrich am Anfang der URL "Nächste Seite": "/ erfolgreich_loggt_out /" ist von entscheidender Bedeutung. Ohne diesen Schrägstrich versucht Django, die URL "Abmelden" mit der URL "erfolgreich_loggt_out" zu verketten. Dadurch wird eine neue "illegale" URL erstellt. Macht das Leben ein bisschen schwierig, wenn Sie Benutzern Ihre Anmeldeseite nach dem Abmelden präsentieren möchten.
Rickka
58

Ein einfacher Weg:

Fügen Sie Ihrer Abmeldeanforderungs-URL den Parameter 'next' hinzu. Beispielsweise:

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

Dann erledigt die Abmeldeansicht den Trick für Sie.

Für die Umleitung nach der Anmeldung können Sie sie einfach in settings.py festlegen:

LOGIN_REDIRECT_URL = '/path_to_the_page'
LOGIN_URL = '/path_to_the_page'
YeRuizhi
quelle
35
Seltsam, dass es nicht nur eine LOGOUT_REDIRECT_URL-Eigenschaft gibt.
Rob Grant
6
In Kürze erhältlich ... docs.djangoproject.com/de/dev/ref/settings/…
Carl
16
Wir haben jetzt 2017 und LOGOUT_REDIRECT_URL funktioniert tatsächlich :)
m.antkowicz
Gute Antwort. Steck das in meine base.htmlund vergiss es. : D (Ich verwende Vintage Django auf Debian Jessie: S, so dass die neuen Einstellungen nicht verfügbar sind.)
underscore_d
12

Sie können Benutzer überall hin umleiten, indem Sie LOGOUT_REDIRECT_URL in Ihrer Datei settings.py verwenden

LOGOUT_REDIRECT_URL = 'url name to redirect'
SACHIN CHAVAN
quelle
9

Zur aktuellen Seite umleiten

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

Getestet in Django 1.9.

Siehe auch: Ist es möglich, Abfrageparameter über das Django-Vorlagen-Tag {% url%} zu übergeben?

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
quelle
1
Vielen Dank, dies hat mir für den Fall geholfen, dass LOGOUT_REDIRECT_URL dies nicht tat (weil ich in der Test- und Produktionsumgebung unterschiedliche Pfade habe).
Dmytro Gierman
4

Geben Sie in Ihrer Abmeldeansicht HttpResponseRedirect (url) zurück, nachdem Sie den Benutzer endgültig abgemeldet haben. Bitte sehen Sie hier für weitere Details .

Ke Sun.
quelle
3

In den Dokumenten können Sie eine eigene Abmeldeansicht (die nur ein einfacher Wrapper sein kann) schreiben, die die nächste Seite überschreibt.

Don
quelle
3

Sie können sogar benannte URLs für Ihren nächsten Parameter verwenden:

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

Wenn Sie die Umleitungs-URL auf Client-Ebene festlegen möchten, können Sie dies folgendermaßen tun urls.py:

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

Und dann in der Vorlage:

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

Wo das next, zeigen Sie auf die richtige URL.

Menda
quelle