Vous n'êtes pas identifié(e).
Bonjour,
Supposons une page présentant une liste d'objets (des articles, des annonces, etc.).
Il est usuel que cette liste reste synthétique et propose des liens vers une page
qui présentera chacun des objets plus en détail.
Une fois que le lecteur a pris connaissance de ces détails, comment lui offrir un lien pour revenir à la liste ?
Une première solution basique est d'utiliser le template tag standard {% url %} en citant la vue de liste en paramètre.
Elle a certains inconvénients :
1. Une requête est envoyée au serveur, dont on pourrait se passer puisqu'en principe on vient de cette page
et qu'elle est donc déjà dans l'historique du navigateur.
2. Si la liste était offerte avec des paramètres, tel qu'un numéro de page, il n'est pas convivial de se faire ramener à
la première page si l'intention est de poursuivre naturellement le balayage à la suite du dernier objet observé.
Il faudrait alors faire l'effort d'assurer la propagation des paramètres d'une vue à l'autre.
Pour compenser ces inconvénients, il existe une technique connue :
Faire comme si l'internaute demande la page précédente à son navigateur par le code :
'javascript:history.back()'
A nouveau cette technique pèche par un inconvénient : Si l'internaute est arrivé sur la page-détails
par un marque-page, il ne faut pas compter sur la présence de la page-liste en page précédente.
Le template tag {% url_or_back %} a pour objectif de tirer le meilleur des deux contextes.
Il a la même syntaxe que {% url %}, avec la finesse suivante :
Si l'url visée est celle dont on vient, tout en ignorant la présence éventuelle de paramètres,
alors le javascript est servi, sinon le lien classique est servi.
Disponible à http://bitbucket.org/psam/django-template-lib/
Hors ligne
Bonjour,
Merci de partager, c'est assez intéressant.
Par contre, si je puis me permettre, l'utilisation a outrance de l'opérateur
ternaire rends ton code difficile à lire et à commenter efficacement.
Bonne journée,
Natim
Hors ligne