Frage

Meine URLconf enthält dieses Muster:

url(r'^accounts/logout/$','django.contrib.auth.views.logout', name="logout"),

Und ich habe versucht, das in einer Vorlage mit der URL-Tag wie folgt zu umkehren:

<a href="{% url logout next_page=request.path %}">logout</a>

Aber ich immer die folgende Fehlermeldung erhalten:

Reverse for 'logout' with arguments '()' and keyword arguments '{'next_page': u'/first-page/child/'}' not found

Ich dachte django.contrib.auth.views.logout soll eine Option next_page Parameter nehmen. Ich bin sicher, ich bin etwas fehlt offensichtlich, aber ich bin mir nicht sicher, was es ist.

War es hilfreich?

Lösung

Ja, Sie haben recht, hat django.contrib.auth.views.logout einen optionalen „next_page“ Parameter zu akzeptieren, aber nicht vergessen, dass die „url“ Tag-Spiele zu URLconf Muster, nicht Ansichten, so ist es nicht bewusst ist von dem, was ist oder nicht, ein Parameter einer Ansicht. So dies deutet darauf hin, dass Sie eine benannte Gruppe in der regexp für das obige Muster machen „next_page“ müssen, was man tun könnte, aber es ist ein einfacher Weg, um Griff Umleitungen ...

Mit Blick auf django.contrib.auth .views.logout , können Sie, dass in Abwesenheit eines „next_page“ Parameter sehen, die Ansicht Umleitungen auf das, was uRL in beiden request.GET oder request.POST mit der Taste „redirect_field_name“ vorgesehen ist, ein Parameter, standardmäßig auf „REDIRECT_FIELD_NAME“, die wiederum standardmäßig die Zeichenfolge „weiter“. So verlassen URLconf, wie es ist, Sie so etwas wie dies in der Vorlage tun:

<a href='{% url logout %}?next={{ request.path }}'>logout</a>

Andere Tipps

Im Grunde Djangos URL Dispatcher betrachtet die URLconf und dieses Argument und sagen: „Ich weiß nicht, wo dieses Argument setzen“, weil sie nicht an den View-Funktionen sehen die Urls zu Punkt, nur die URLconf und die Muster in ihm.

Im Moment gibt es keinen Platz in Ihrem URL-Muster für dieses Argument.

d. Sie können mit den zusätzlichen Argumenten nennen django.contrib.auth.views.logout, wenn Sie Ihr eigenes Muster für sie schreiben oder wenn Sie es von Ihrer eigenen Ansicht nennen, aber nicht von seinen Standard-URL-Mustern.

Eine dieser URL-Muster könnte für Sie arbeiten (nicht getestet):

url(r'^accounts/logout/(?P<next_page>.*)?$','django.contrib.auth.views.logout', name="logout"),
url(r'^accounts/logout/$','django.contrib.auth.views.logout', kwargs={'next_page':None}, name="logout"),

Ich hoffe, das hilft!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top