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
{% for user in users %}
- {{ user['username'] }} {{ user['name'] }}
{% endfor %}
{{ 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
- username1 name1
- username2 name2
- username3 name3
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 -%}
{{ country['Name'] }} | {{ country['Population'] }} |
{% if loop.index % 10 == 0 %} {#- loop is a special variable -#}
{{ loop.index }} |
{% endif %}
{% endfor %}
{% endblock %}