Python: Módulo: jinja2

El módulo jinja2 es un potente sistema de plantilla para Python.

Vamos a ver varios ejemplos:

Un ejemplo muy básico sin usar plantillas externas (ficheros). Con Template creamos una plantilla a partir de una cadena y con render procesamos la plantilla con las variables. Aunque este uso tan básico se podría hacer con .format.

from jinja2 import Template

template = Template('Hola {{ nombre }}!')

template.render(nombre='IMD')
'Hola IMD!'

Un ejemplo básico pero usando una plantilla externa (ficheros). Creamos un fichero (lo llamaremos index.tpl) con el contenido de la plantilla, por ejemplo:

<html> <head> <title>{{titulo}}</title> </head <body> <h1>{{cabecera}}</h1> <p>{{cuerpo}}</p> </body> </html>

y luego ejecutamos el siguiente código. Con FileSystemLoader indicamos el directorio donde leer las plantillas. Con Environment creamos un entorno. Con tpl_env.get_template cargamos la plantilla indicada. Y con render procesamos la plantilla con las variables.

from jinja2 import Environment, FileSystemLoader

tpl_dir = FileSystemLoader(‘plantillas’)

tpl_env = Environment(loader=file_loader)

template = tpl_env.get_template(‘index.txt’)

template.render(titulo='www.imd.guru', cabecera="Bienvenido a IMD.guru", cuerpo="Texto del cuerpo.")

En el ejemplo anterior el problema es que en el render debemos indicar cada una de las variables, lo cual puede ser en ocasiones un engorro. Para ello vamos a usar un diccionario para las variables. Seguimos con la misma plantilla (index.tpl) anterior, pero modificando un poco las variables, indicando una variable que hará de diccionario. Incluso se podrían usar diferentes diccionarios.

<html> <head> <title>{{data.titulo}}</title> </head <body> <h1>{{data.cabecera}}</h1> <p>{{data.cuerpo}}</p> </body> </html>

El código es el mismo solo que tenemos un diccionario con las variables y solo pasamos a render el diccionario.

from jinja2 import Environment, FileSystemLoader

tpl_dir = FileSystemLoader(‘plantillas’)

tpl_env = Environment(loader=file_loader)

template = tpl_env.get_template(‘index.txt’)

tpl_datos = {}
tpl_datos['titulo'] = 'www.imd.guru'
tpl_datos['cabecera'] = "Bienvenido a IMD.guru"
tpl_datos[' cuerpo'] = "Texto del cuerpo."

template.render(data=tpl_datos)

Más información en: Jinja2

Retro

Lugares

Redes

Sistemas

Varios