2016-07-13 33 views
0

Ich möchte Benutzer auf eine bestimmte Website umleiten example.com nach logoutdjango: umleiten Ausgabe Abmelde functionlaity

Ich habe folgenden Code hinzugefügt App urls.py

urlpatterns = [  
    url(r'^logout', 'django.contrib.auth.views.logout', {'next_page': 'https://www.example.com/'}), 
] 

Aber ich bin immer einen Fehler django.core.urlresolvers.NoReverseMatch: Reverse for 'logout' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []

Ich habe eine Lösung gefunden, die nach dem Abmelden auf eine beliebige Ansicht umgeleitet werden kann, aber wie kann ich auf eine andere Website umleiten?

django version 1.9

Wie pro Vorschlag hier ist neuer Code eine andere Website von benutzerdefinierten Ansicht ..

views.py

#call for logout 
return HttpResponseRedirect('/myapp/logout') 

urls.py

url(r'^logout', views.custom_logout, name='logout'), 

zu umleiten hinzugefügt views.py

def custom_logout(request): 
    request.session.flush() 
    redirect('https://www.example.com/') 

Ich erhalte Fehler Reload the page to get source for: http://127.0.0.1:8000/myapp/logout

+0

Meine Antwort erklärt, wie man den "NoReverseMatch" Fehler beheben kann, aber es hilft Ihnen nicht, auf eine andere Website umzuleiten. Die Weiterleitung an einen anderen Host kann ein Sicherheitsrisiko darstellen. Der Django [Logout-View-Code] (https://github.com/django/django/blob/stable/1.10.x/django/contrib/auth/views.py#L122) verhindert spezifisch, dass "next_url" ein anderer Host ist . Wenn Sie sich abmelden und dann auf eine andere Website umleiten möchten, müssen Sie Ihre eigene Ansicht schreiben, die dies tut. – Alasdair

+0

@Alasdair Ok. Können Sie mir bitte in diesem Fall erklären, eine andere Website von der benutzerdefinierten Ansicht umzuleiten? – Shri

+0

Bitte überprüfen Sie die Bearbeitung in Frage – Shri

Antwort

0

Sie sollten eine name auf Ihre URL-Muster hinzufügen.

urlpatterns = [  
    url(r'^logout', 'django.contrib.auth.views.logout', name='logout'), 
] 

Nebenbei ist die Verwendung der Zeichenfolge 'django.contrib.auth.views.logout' veraltet. Sie sollten stattdessen die Ansicht importieren. Zum Beispiel können Sie tun:

+0

Jetzt bekomme ich '302 gefunden' mit diesem Fehler 'Reload die Seite um Quelle zu bekommen für: http://127.0.0.1:8000/myapp/logout' – Shri

+0

Ich habe 'return redirect ('/myapp/logout ') hinzugefügt 'in Sichtdatei bei irgendeiner Bedingung. – Shri

+0

Ich versuchte Server Neustart mit 'runserver' Befehl, aber nicht funktioniert – Shri