tarantino - Etiqueta de plantilla de Django: ¿Cómo enviar next_page en{url auth_logout}?
django tutorial (4)
Tengo un urls.py con esta línea:
url(r''^logout/$'', ''django.contrib.auth.views.logout'', name="auth_logout"),
En mi etiqueta de plantilla tengo esta línea:
<a href="{% url auth_logout %}">Logout</a>
Ahora, me gustaría agregar el parámetro next_page a la url templatetag, pero no puedo hacer que funcione. He intentado esto:
{% url auth_logout request.path %}"
...y esto:
{% url auth_logout request,request.path %}
Pero ninguno de ellos funciona. ¿Cómo puedo proporcionar la función con el parámetro opcional next_page usando el url templatetag?
¡Gracias!
Dos cosas:
- django.contrib.auth.views.logout () toma una next_page opcional que no está proporcionando
- url templatetag tiene argumentos separados por comas
Entonces, primero modifique su url para aceptar next_page Su URLConf necesita modificaciones para pasar en la página siguiente, algo como esto para un redireccionamiento codificado:
url(r''^logout/$'', ''django.contrib.auth.views.logout'', {''next_page'': ''/''}, name=''auth_logout''),
y un resultado parametrizado:
url(r''^logout/(?P<next_page>.*)/$'', ''django.contrib.auth.views.logout'', name=''auth_logout_next''),
Y luego modifica tu plantilla para pasar en la siguiente_página
<a href="{% url auth_logout_next /some/location %}">Logout</a>
Para lo que vale, uso esto:
<a href="{% url auth_logout %}?next=/">Logout</a>
Sander Smits tiene la solución más fácil. En su caso use:
<a href="{% url "auth_logout" %}?next={{ request.path|urlencode }}">Logout</a>
Y en un caso más general, usar:
<a href="{% url "auth_logout" %}?next={% url "my_url" my_params |urlencode %}">Logout</a>
Si alguien quiere dar un enlace HTML a través del error de validación views.py con mark_safe y las traducciones.
Utilicé esta parte para cerrar la sesión del usuario y luego enviarlo a la página de recortura de contraseña.
mark_safe(_("Error message") + ''<a href="'' + reverse(''logout'') + ''?next='' + reverse(''password_recover'') + ''">'' + ugettext("Forgot password?") + ''</a>'')