Question

Je suis un outillage autour avec Django et je me demande s'il y a un moyen simple de créer un lien « retour » à la page précédente en utilisant le système de template.

Je figure que dans le pire des cas, je peux obtenir ces informations de l'objet de la demande dans la fonction de vue, et le transmettre à la méthode de rendu de modèle, mais j'espère que je peux éviter tout ce code passe-partout en quelque sorte.

J'ai vérifié le modèle Django docs et je ne l'ai pas vu quelque chose qui mentionne explicitement.

Était-ce utile?

La solution

Eh bien, vous pouvez activer:

'django.core.context_processors.request',

dans votre bloc settings.TEMPLATE_CONTEXT_PROCESSORS et accrochez le referrer mais c'est un peu nauséabonde et peut se briser tous les sens.

La plupart des endroits où vous voudriez ce (par exemple la page post-édition sur le SO), vous avez un vrai objet à accrocher sur (dans cet exemple, le poste) de sorte que vous pouvez facilement travailler ce qui devrait être la page précédente appropriée .

Autres conseils

En fait, il est go(-1).

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

Cette solution a fonctionné pour moi:

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

Mais c'est l'ajout précédemment 'django.core.context_processors.request', à TEMPLATE_CONTEXT_PROCESSORS dans les paramètres de votre projet.

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

|escape pour sortir de la stringage ""

Pour un bouton « retour » dans les formulaires de changement pour administration de Django ce que je finis par faire est un filtre de modèle personnalisé pour analyser et décoder la variable « preserved_filters » dans le modèle. J'ai placé les éléments suivants sur des modèles personnalisés / admin / fichier submit_line.html:

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

Et puis créé un filtre modèle personnalisé:

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)

Vous pouvez toujours utiliser l'option côté client qui est très simple:

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

En utilisant la solution côté client serait la solution appropriée.

<a href="javascript:history.go(-1)" class="btn btn-default">Cancel</a>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top