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.

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/'})

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'

35
Seltsam, dass es nicht nur eine LOGOUT_REDIRECT_URL-Eigenschaft gibt.
Rob Grant


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'

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?


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


3

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


3

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

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

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.