Django-fr

Forum

#1 06-10-2010 10:15:32

psam
Membre
Lieu : Nantes - Pays de Loire
Inscription : 05-09-2010
Messages : 5

[apps] template tag url_or_back

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

#2 06-10-2010 10:47:17

Rémy HUBSCHER
Membre
Inscription : 11-08-2010
Messages : 161

Re : [apps] template tag url_or_back

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

Pied de page des forums