Frage

Ich bin Ausrüstung um mit Django und ich frage mich, ob es eine einfache Möglichkeit, eine schaffen „zurück“ -Link auf die vorherige Seite des Template-System verwendet wird.

Ich vermute, dass im schlimmsten Fall, den ich in der Ansicht Funktion diese Informationen aus dem Request-Objekt bekommen, und geben sie an die Vorlage Rendering-Methode, aber ich hoffe, ich irgendwie alle diese vorformulierten Code vermeiden.

Ich habe die Django-Vorlage docs überprüft und ich habe nichts gesehen, dass dies ausdrücklich erwähnt.

War es hilfreich?

Lösung

Nun können Sie aktivieren:

'django.core.context_processors.request',

in Ihrem settings.TEMPLATE_CONTEXT_PROCESSORS Block und die Referrer-Haken, aber das ist ein bisschen widerlich und könnte überall brechen.

Die meisten Orte, wo man diese wollen würde (zB die Bearbeitungs Post-Seite auf SO) Sie haben ein reales Objekt Haken an (in diesem Beispiel der Post), so können Sie ganz einfach herausfinden, was die richtige vorherige Seite sein sollte .

Andere Tipps

Eigentlich ist es go(-1).

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

Diese Lösung ausgearbeitet für mich:

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

Aber das zuvor 'django.core.context_processors.request', Hinzufügen in Ihrem Projekt der Einstellungen TEMPLATE_CONTEXT_PROCESSORS.

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

|escape, um aus dem "" stringage

Für eine Schaltfläche ‚Zurück‘ in Änderungsformularen für Django Admin, was ich am Ende tun ist ein eigener Template Filter zu analysieren und die ‚preserved_filters‘ Variable in der Vorlage zu dekodieren. Ich legte die folgenden auf einem benutzerdefinierten Vorlagen / admin / submit_line.html-Datei:

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

Und dann ein eigenes Template Filter erstellt:

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)

Sie können jederzeit die Client-Seite Option benutzen, die sehr einfach ist:

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

Client-Lösung wäre die richtige Lösung.

<a href="javascript:history.go(-1)" class="btn btn-default">Cancel</a>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top