~tieong/notjinja2

a531d7b412577e43a0722884d547f5fb9eba63ef — Thomas Ieong 1 year, 7 months ago 8100e55
Added README
1 files changed, 72 insertions(+), 0 deletions(-)

A README.org
A README.org => README.org +72 -0
@@ 0,0 1,72 @@
* NotJinja2

Ceci est un templating engine minimal avec la syntaxe de jinja2.
Inspiré du templating engine de coverage.py réalisé par Ned Batchelder dans le livre 'Architecture
of open source software'.

* Grammaire

NotJinja2 supporte une grammaire très simple !

Conditionnels:

Tout les opérateurs de python tel que >=,==,<=... sont supportés.

#+begin_src python
  {% if user.is_logged_in and user.name == 'Donald' %}
      Hello {{ user.name }}!
  {% endfor %}
#+end_src

#+begin_src python
  {% if user.is_logged_in and user.admin %}
      Hello admin!
  {% elif user.is_logged_in %}
      Hello user!
  {% else %}
      Please login!
  {% endfor %}
#+end_src

Boucle:

- for

Ou x et y peuvent être des instances d'une classé défini par
l'utilisateur, il est possible d'appeler les méthodes associées
tel que {{ x.calc_price() }} par exemple.

#+begin_src python
  {% for x, y in my_list %}
      {{ x }}: {{ y }}
  {% endfor %}
#+end_src

#+begin_src python
  {% for k, v in my_dict.items() %}
      {{ k }}: {{ v.name }}
  {% endfor %}
#+end_src

Commentaires :

#+begin_src python
  {# this is a comment #}
#+end_src

Filtres :

#+begin_src python
  {% for k, v in my_dict.items() %}
      {{ k }}: {{ v.name|format_name }}
  {% endfor %}
#+end_src

Pour le moment il n'est possible que d'appliquer qu'un seul filtre.

Le templating engine utilise eval, il n'y aucune mesure de sécurité l'input est
supposé safe, donc ne pas utiliser ceci pour une appli qui reçoit des inputs
indigne de confiance.

Pour plus d'exemples voir les tests inclus avec, il y'a quelques vérifications basiques
pour signaler les erreurs tel qu'un if,for non balancé.