jueves, 21 de noviembre de 2013

Introducción a Jinja2


Hoy les quería comentar sobre Jinja2, una librería que en los últimos días estaba utilizando para renderizar mis script en Python a una salida HTML de una forma muy simple y rápida de aprender, osea "Python style".

En palabras simple, Jinja2 es un motor de plantillas con todas las funciones de Python. Tiene soporte completo de Unicode, un entorno de ejecución, seguridad incorporada, utilizada por grandes proyectos y se encuentra bajo los términos de la licencia BSD.

Es simple entender en un fragmento de código como este, la forma en que podemos utilizar Jinja2

{% extends "layout.html" %}
{% block body %}
  <ul>
  {% for user in users %}
    <li>
        <a href="{{ user.url }}">{{ user.username }}</a>
    </li>
  {% endfor %}
  </ul>
{% endblock %}

Lo primero que encontramos en su documentación es que Jinaj2 está inspirado en el sistema de plantillas de Django y si pueden observar un poco más en detalle, van a notar que Jinja2 es muy similar a Twig que es el motor de plantillas en Symfony2.

Como característica adicional, posee un sistema automático para escapar en los posibles ataques XSS (Cross-Site Scripting), herencia y extensión de plantillas, alto rendimiento en tiempo de ejecución.


Instalación


Existen diferentes formas de instalar esta librería, ya sea descargando el código fuente desde su repositorio en GitHub, utilizando easy_install o pip de Python o simplemente apt de Debian

$ apt-get install python-jinja2

Ejemplo


Podemos crear un script en Python para mostrar una forma simple de utilizarlo.

from jinja2 import Environment

HTML = """
<html>
<head>
<title>{{ title }}</title>
</head>
<body>
El CoDiGo K
</body>
</html>
"""

def print_html_doc():
    print Environment().from_string(HTML).render(title='Mi primer ejemplo con Jinja2')

if __name__ == '__main__':
    print_html_doc()

Otra forma más escalable de utilizar Jinja2 es crear por un lado el script en Python y por otro lado el template HTML

from jinja2 import Environment, FileSystemLoader

THIS_DIR = os.path.dirname(os.path.abspath(__file__))

def print_html_doc():
    j2_env = Environment(loader=FileSystemLoader(THIS_DIR),
                         trim_blocks=True)
    print j2_env.get_template('template.html').render(
        title='Mi primer ejemplo en Jinja2'
    )

if __name__ == '__main__':
    print_html_doc()

El archivo template.html podría tener el siguiente aspecto:

<html>
<head>
<title>{{ title }}</title>
</head>
<body>
 El CoDiGo K
</body>
</html>

Conclusión


Realmente solo me queda decirles que en la necesidad puntal de obtener un reporte en HTML de un script donde manipulaba datos con Python, Jinja2 fue una excelente alternativa, si pueden notar su sintaxis es simplemente bella y rápida de implementar algo.

No me queda más que recomendarles nuevamente a que prueben Jinja2 y me dejen todos sus comentarios aquí abajo del post o en las redes sociales.

Saludos!

Enlace | Sitio oficial de Jinja2

No hay comentarios.:

Publicar un comentario

Entradas populares