Domanda

Sono utensili in giro con Django e mi chiedo se c'è un modo semplice per creare un Link "indietro" alla pagina precedente utilizzando il modello di sistema.

Ho capito che, nel peggiore dei casi posso ottenere queste informazioni dal oggetto di richiesta nel funzione di visualizzazione, e passarlo insieme al metodo di rendering modello, ma spero che posso evitare tutto questo codice standard in qualche modo.

Ho controllato i documenti di modello Django e non ho visto nulla che menziona esplicitamente.

È stato utile?

Soluzione

Ebbene si può attivare:

'django.core.context_processors.request',

nel blocco settings.TEMPLATE_CONTEXT_PROCESSORS e agganciare il referrer, ma questo è un po 'nauseante e potrebbe rompere tutto il luogo.

La maggior parte dei luoghi in cui ci si vuole questo (ad esempio la pagina di modifica post su SO) si dispone di un oggetto reale per agganciare a (in questo esempio, il post) in modo da poter facilmente capire cosa la corretta pagina precedente dovrebbe essere .

Altri suggerimenti

In realtà è go(-1).

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

Questa soluzione ha funzionato per me:

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

Ma questo è l'aggiunta in precedenza 'django.core.context_processors.request', a TEMPLATE_CONTEXT_PROCESSORS nelle impostazioni del vostro progetto.

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

|escape per uscire dalla stringage ""

Per un tasto 'back' in forme di cambiamento per Django Admin quello che finisce per fare è un filtro modello personalizzato per analizzare e decodificare la variabile 'preserved_filters' nel modello. Ho messo il seguente su un templates / admin / file di submit_line.html personalizzato:

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

E poi creato un filtro modello personalizzato:

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)

Si può sempre utilizzare l'opzione lato client che è molto semplice:

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

Utilizzando la soluzione lato client sarebbe la soluzione adeguata.

<a href="javascript:history.go(-1)" class="btn btn-default">Cancel</a>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top