Domanda

Il mio URLconf contiene questo schema:

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

E ho cercando di invertire tale in un modello con il tag URL come questo:

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

Ma continuo a ricevere il seguente errore:

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

Ho pensato django.contrib.auth.views.logout si suppone di prendere un parametro di un'opzione next_page. Sono sicuro che mi manca qualcosa di ovvio, ma non sono sicuro di cosa sia.

È stato utile?

Soluzione

Si hai ragione, django.contrib.auth.views.logout non accetta un parametro opzionale "next_page", ma non dimenticare che il tag "url" corrisponde a urlconf modelli, non viste, quindi non è a conoscenza di ciò che è o non è un parametro di una vista. Quindi, questo suggerisce che è necessario fare "next_page" un gruppo denominato nella regexp per il modello di cui sopra, che si potrebbe fare, ma c'è un modo più semplice per gestire redirect ...

django.contrib.auth .views.logout , si può vedere che, in assenza di un parametro "next_page", la vista reindirizza a qualunque URL è prevista sia in request.GET o request.POST con il "redirect_field_name" chiave, un parametro che default "REDIRECT_FIELD_NAME" che a sua volta di default alla stringa "Avanti". Quindi, lasciando il vostro urlconf il modo in cui è, si può fare qualcosa di simile nel modello:

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

Altri suggerimenti

In sostanza dispatcher URL di Django sta guardando l'urlconf e tale argomento e dicendo "non so dove mettere questo argomento", perché non guardare le funzioni di vista gli URL puntano, solo l'urlconf e gli schemi in esso.

In questo momento non c'è posto nel vostro modello di URL per tale argomento.

vale a dire. è possibile chiamare django.contrib.auth.views.logout con gli argomenti in più se si scrive il proprio motivo per esso o se si chiama dal vostro punto di vista, ma non dal suo schema di default URL.

Uno di questi modelli di URL potrebbe funzionare per voi (non testato):

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"),

Speranza che aiuta!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top