Jinja2 ****** jinja est un module python permettant de produire rapidement du texte dynamique. L'idée principale est de fournir à un module: - un template - une liste de valeur jinja fournit des outils pour réaliser des templates avec boucle et condition. On retrouve jinja2 sur cete url http://jinja.pocoo.org/ On retrouve la doc de l'Api sur cet url http://jinja.pocoo.org/docs/ Installation ------------ rien de plus simple avec easy_install (pipi) :: easy_install jinja2 Exemple d'utilisation --------------------- .. code-block:: python from jinja2 import Template template = Template('Hello {{ name }}!') rst = template.render(name='John Doe') print rst un exmple avec des boucles, des if et des fonctions .. code-block:: python from jinja2 import Template template = Template(""" {% if users %}

Members

{{ users|length }} Members {% else %}

Not Members

{% endif %}""") lst_users=[ {'username':'username1', 'name':'name1'}, {'username':'username2', 'name':'name2'}, {'username':'username3', 'name':'name3'} ] rst = template.render(users=lst_users) print rst le résultat ::

Members

3 Members un autre exemple avec une connexion à une base .. code-block:: python import MySQLdb from MySQLdb.cursors import DictCursor import jinja2 env = jinja2.Environment(loader=jinja2.FileSystemLoader(["/home/beda/projects/python-ref/_tmp/infiles"])) #@+ def index(): connection = MySQLdb.connect( user="test", passwd="pass123", db="world", host="localhost", cursorclass=DictCursor, use_unicode=True) cursor1 = connection.cursor() cursor1.execute( "SELECT Name,Population FROM Country ORDER BY Name;") countries = cursor1.fetchall() cursor1.close() connection.close() template = env.get_template( "page_template2_syntax.html") return template.render( title="Country list", countries=countries) le template (avec des extends) :: {% extends 'page_template2.html' %} {% block title %}Syntax{% endblock %} {% block subtitle %}Examples of Jinja syntax{% endblock %} {% block content %} {# comment #} {% for country in countries %} {%- if country.Population > 100000000 -%} {#- dictionary access similar to attribute access -#} {%- elif country.Population > 10000000 -%} {#- - after % or # removes extra newlines -#} {%- else -%} {%- endif -%} {% if loop.index % 10 == 0 %} {#- loop is a special variable -#} {% endif %} {% endfor %}
{{ country['Name'] }}{{ country['Population'] }}
{{ loop.index }}
{% endblock %}