Pregunta

Mi URLconf contiene este patrón:

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

Y he tratando de revertir que en una plantilla con la etiqueta URL como esta:

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

Pero sigo recibiendo el siguiente error:

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

pensé django.contrib.auth.views.logout se supone que debe tomar un parámetro opción next_page. Estoy seguro de que me falta algo obvio, pero no estoy seguro de lo que es.

¿Fue útil?

Solución

Si tienes razón, django.contrib.auth.views.logout acepta un parámetro opcional "next_page", pero no se olvide que la etiqueta de "url" coincide con URLconf patrones, no vistas, así que no es consciente de lo que es o no es un parámetro de una vista. Así que esto sugiere que es necesario hacer "next_page" un grupo nombrado en la expresión regular para el patrón anterior, lo que se podría hacer, pero hay una manera más fácil de manejar redirecciones ...

En cuanto a django.contrib.auth .views.logout , se puede ver que, en ausencia de un parámetro "next_page", la vista vuelve a dirigir a cualquier URL que se proporciona en cualquiera request.GET o request.POST con el "redirect_field_name" clave, un parámetro que por defecto es "REDIRECT_FIELD_NAME" que a su vez por defecto es la cadena "siguiente". Así que salir de su URLconf la forma que sea, se puede hacer algo como esto en su plantilla:

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

Otros consejos

Básicamente despachador URL de Django está mirando el URLconf y ese argumento y decir "no sé dónde poner este argumento", ya que no toma en cuenta las funciones de vista las URLs apuntan a, sólo el URLconf y los patrones en ella.

En este momento no hay lugar en su patrón de URL para ese argumento.

es decir. puede llamar django.contrib.auth.views.logout con los argumentos adicionales si usted escribe su propio patrón para ello o si se llama desde su propio punto de vista, pero no de su patrón de URL por defecto.

Uno de estos patrones de URL podría funcionar para usted (no probado):

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

Espero que ayude!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top