L’expérience est une lanterne que l’on porte sur le dos et qui n’éclaire jamais que le chemin parcouru. Confucius

Aller au contenu | Aller au menu | Aller à la recherche

Mot-clé - template

Fil des billets - Fil des commentaires

lundi, 11 juillet 2011

Récursivité au sein d'un template django

Pas de nouveauté fracassante, juste l'exemple d'une syntaxe simple et dépouillée présentant la récursivité du côté des templates. L'exemple présente l'affichage d'une liste de commentaires en cascade. Cf Screenshot. (Valide Django 1.2)

Lire la suite...

vendredi, 25 mars 2011

Django : Personnaliser la page d'erreur CSRF

Pour se défendre des attaques CSRF, Django contient les outils indispensables. Cet article donne la recette pour gérer soi-même le rendu de la page d'erreur liée à ce type d'attaque.

Lire la suite...

vendredi, 2 avril 2010

Django, internationaliser un "template tag"

De base la commande python manage.py makemessages -l fr permet de générer un fichier .po contenant les chaines à traduire. C'est pratique et puissant, car très rapidement, toutes chaines prêtes à être traduite dans les actions (views.py), les formulaires (forms.py), les modèles (models.py), les templates (*.html).. se retrouvent listées.
Le hic, c'est que cette commande est incapable de détecter les chaines à traduire dans nos templates tag perso. Il faut alors ajouter la bonne expression régulière au sein du code Django.

Modifier le code Django

Il y a probablement beaucoup plus propre mais voici la démarche :

  1. Localiser l'installation de django dans votre système ( via locate django)
  2. Localiser le fichier trans_real.pyc
  3. Ajouter une nouvelle expression régulière dans ce fichier
  4. Ajouter l'appel à l'expression régulière
  1. Editer le fichier : sudo vim /usr/local/lib/python2.6/dist-packages/django/utils/translation
  2. Ligne 406 ajouter : voir code -> permet de détecter les chaines de la forme {% sheet_field mon_objet "chaine à traduire" %}
  3. Ligne 462 ajouter : imatch2 = inline_re2.match(t.contents)
  4. Ligne 469 ajouter : voir code

Logiquement via la commande python manage.py makemessages -l fr de nouvelles chaines doivent être repérées. Sinon la compilation du fichier .po en fichier .mo reste identique via la commande python manage.py compilemessages . PS : J'utilise généralement poedit ou un simple éditeur de texte pour traduire les chaines et vous ?