Pregunta

Estoy dando vueltas con Django y me pregunto si hay una forma sencilla de crear una vínculo "volver" a la página anterior usando el sistema de plantillas.

Calculo que en el peor de los casos puedo obtener esta información de la solicitud objeto de la función de vista, y pasar a lo largo de la plantilla método de representación, pero estoy esperando que pueda evitar todo esto código repetitivo de alguna manera.

He comprobado la documentación de Django y no he visto nada que menciona explícitamente.

¿Fue útil?

Solución

Bien puede activar:

'django.core.context_processors.request',

en el bloque de settings.TEMPLATE_CONTEXT_PROCESSORS y enganche a cabo la de referencia, pero eso es un poco nauseabundo y se puede romper por todo el lugar.

La mayoría de los lugares en los que te gustaría esto (por ejemplo, la página de edición de mensaje el SO) tiene un objeto real para enganchar a (en ese ejemplo, el post) de esta manera puede trabajar con lo que debe ser la página anterior adecuada .

Otros consejos

En realidad es go(-1).

<input type=button value="Previous Page" onClick="javascript:history.go(-1);">

Esta solución funcionó para mí:

<a href="{{request.META.HTTP_REFERER}}">Go back</a>

Pero eso está añadiendo previamente 'django.core.context_processors.request', a TEMPLATE_CONTEXT_PROCESSORS en la configuración del proyecto.

<a href="{{request.META.HTTP_REFERER|escape}}">Back</a>

|escape para salir de la stringage ""

Para un botón de 'atrás' en las formas de administración de cambio para Django lo que termino haciendo es un filtro de plantilla personalizado para analizar y decodificar la variable '' preserved_filters en la plantilla. Hice lo siguiente en un plantillas / admin archivo personalizado / submit_line.html:

<a href="../{% if original}../{% endif %}?{{ preserved_filters | decode_filter }}">
    {% trans "Back" %}
</a>

Y luego creó un filtro de plantilla:

from urllib.parse import unquote
from django import template

def decode_filter(variable):
    if variable.startswith('_changelist_filters='):
        return unquote(variable[20:])
    return variable

register = template.Library()
register.filter('decode_filter', decode_filter)

Siempre se puede utilizar la opción del lado del cliente que es muy simple:

<a href="javascript:history.go(1)">Back</a>

El uso de la solución del lado cliente podría ser la solución adecuada.

<a href="javascript:history.go(-1)" class="btn btn-default">Cancel</a>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top