Question

Mon URLConf contient ce modèle:

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

Et je l'ai essayer d'inverser cette tendance dans un modèle avec la balise d'URL comme ceci:

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

Mais je continue à obtenir l'erreur suivante:

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

Je pensais que django.contrib.auth.views.logout est censé prendre un paramètre next_page option. Je suis sûr que je manque quelque chose évidente, mais je ne suis pas sûr de ce qu'il est.

Était-ce utile?

La solution

Oui, vous avez raison, django.contrib.auth.views.logout n'accepte un paramètre « next_page » en option, mais ne pas oublier que le « url » tag correspond à URLConf motifs, non vues, il est donc pas au courant de ce qui est ou non un paramètre d'une vue. Donc, cela suggère que vous devez faire « next_page » un groupe nommé dans l'expression rationnelle pour le modèle ci-dessus, vous pouvez le faire, mais il y a un moyen plus facile à gérer ... réoriente

En regardant django.contrib.auth .views.logout , vous pouvez voir qu'en l'absence d'un paramètre « next_page », la vue réoriente à ce que l'URL est fournie dans les deux request.GET ou request.POST avec la touche « redirect_field_name », un paramètre par défaut « REDIRECT_FIELD_NAME » qui par défaut à son tour à la chaîne « suivant ». Donc, en laissant votre URLconf la façon dont il est, vous pouvez faire quelque chose comme ceci dans votre modèle:

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

Autres conseils

En gros répartiteur URL de Django est à la recherche à l'URLconf et cet argument en disant: « Je ne sais pas où mettre cet argument » parce qu'il ne regarde pas la vue des fonctions les urls pointent vers, seul le URLconf et les motifs en elle.

En ce moment, il n'y a pas de place dans votre modèle d'URL pour cet argument.

i.e.. vous pouvez appeler django.contrib.auth.views.logout avec les arguments supplémentaires si vous écrivez votre propre modèle pour ou si vous appelez à partir de votre propre point de vue, mais pas de son modèle d'URL par défaut.

L'un de ces modèles url pourrait fonctionner pour vous (non testé):

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

L'espoir qui aide!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top