Articulo de referencia

Jinja (motor de plantillas)

{{cite web| title=Jinja2 Release History | url=https://pypi.org/project/Jinja2/#history | accessdate=24 June 2020}} "},"latest release version":{"wt":"{{wikidata|property|refere...

Jinja es un motor de plantillas web para el lenguaje de programación Python . Fue creado por Armin Ronacher y está licenciado bajo la Licencia BSD . Jinja es similar al motor de plantillas Django , pero proporciona expresiones al estilo Python, garantizando que las plantillas se evalúen en un entorno aislado . Es un lenguaje de plantillas basado en texto, por lo que puede utilizarse para generar cualquier marcado, así como código fuente.

El motor de plantillas Jinja permite la personalización de etiquetas , [ 3 ] filtros (para formatear o transformar valores [ 4 ] ), pruebas (para evaluar condiciones [ 4 ] ) y variables globales . [ 5 ] Además, a diferencia del motor de plantillas Django, Jinja permite al diseñador de plantillas llamar a funciones con argumentos en objetos. Jinja es el motor de plantillas predeterminado para Flask , así como para las automatizaciones de Home Assistant . [ 6 ] [ 7 ] También lo utilizan Ansible , [ 8 ] Trac y Salt . [ 9 ] También se utiliza para crear macros SQL , por ejemplo, para su uso con dbt . [ 10 ]

Características

Algunas de las características de Jinja son: [ 11 ]

  • ejecución en entorno aislado
  • Escape automático de HTML para prevenir ataques de secuencias de comandos entre sitios (XSS).
  • herencia de plantillas
  • compila el código Python óptimo justo a tiempo.
  • compilación de plantillas opcional con antelación
  • Fácil de depurar (por ejemplo, los números de línea de las excepciones apuntan directamente a la línea correcta en la plantilla).
  • sintaxis configurable

Jinja, al igual que Smarty , también incluye un sistema de filtrado fácil de usar, similar al pipeline de Unix .

Sintaxis

La sintaxis para imprimir la salida en Jinja utiliza llaves dobles, por ejemplo {{ Hello, World! }}.

Las instrucciones que establecen variables en Jinja o que no tienen una salida pueden ir entre `<input>` {%y ` %}<input>`, usando la setpalabra clave `<input>`. Por ejemplo , `<input> ` establece una variable llamada `<input>` con un valor de 42.{%setfoo=42%}foo

De forma similar a lo anterior, los comentarios en jinja se pueden escribir utilizando un signo de número ( #) en lugar de un porcentaje ( %), por ejemplo, {# helpful comment #}.

La sintaxis para crear un filtro en Jinja es una barra vertical ( |), por ejemplo {{ variable|filter }}. Una variable puede tener múltiples filtros, por ejemplo {{ variable|filter|filter }}). [ 4 ]

La sintaxis para crear una prueba en Jinja es la palabra clave isasí como las condiciones para evaluar la validez de una prueba, como por ejemplo ). [ 4 ]{%ifvariableisdivisibleby10%}do something{%endif%}

Los bucles for se pueden usar para iterar sobre secuencias, conservando sus propiedades de objeto. El siguiente ejemplo muestra cómo iterar sobre una lista de usuarios con campos usernamey .password

{% for user in users %} {{ user.username }} {{ user.password }} {% endfor %}

Aunque no se permiten breaky dentro de los bucles, las secuencias se pueden filtrar.continue

Ejemplo

Aquí hay un pequeño ejemplo de un archivo de plantilla example.html.jinja: [ 12 ]

< ! DOCTYPE html> <html> <head> <title> { { variable | escape } } </title> </head> <body> { % - for item in item_list % } { { item } } { % if not loop .last % } , { % endif % } { % - endfor % } </body> </html>

y código de plantillas:

from jinja2 import Template with open ( "example.html.jinja" ) as f : tmpl = Template ( f . read ()) print ( tmpl . render ( variable = "Valor con datos <unsafe>" , item_list = [ 1 , 2 , 3 , 4 , 5 , 6 ] ))

Esto produce la cadena HTML:

<!DOCTYPE html> < html > < head > < title > Valor con < datos inseguros > </ title > </ head > < body > 1, 2, 3, 4, 5, 6 </body> </html>

Tenga en cuenta el signo menos ( -) después de la etiqueta {%: Si agrega un signo menos ( -) al principio o al final de un bloque (por ejemplo, una etiqueta For), un comentario o una expresión de variable, se eliminarán los espacios en blanco antes o después de ese bloque. [ 13 ]

Referencias

  1. "Historial de lanzamientos de Jinja2" . Consultado el 24 de junio de 2020 .
  2. "Versión 3.1.6" . 5 de marzo de 2025. Consultado el 25 de marzo de 2025 .
  3. "Extensiones" . Documentación de Jinja2 (2.8-dev) . Consultado el 26 de mayo de 2015 .
  4. 1 2 3 4 "Filtros y pruebas integrados de Jinja (como los filtros de Django)" . www.webforefront.com . Consultado el 14 de agosto de 2023 .
  5. "Extensiones" . Documentación de Jinja2 (2.8-dev) . Consultado el 26 de mayo de 2015 .
  6. DuPlain, R. (2013). Desarrollo web instantáneo con Flask . Packt Publishing. pág. 30. ISBN  978-1-78216-963-5. Consultado el 26 de mayo de 2015 .
  7. Asistente, Hogar. "Plantillas" . Asistente del hogar . Consultado el 16 de octubre de 2025 .
  8. "Plantillas (Jinja2) — Documentación de Ansible" .
  9. "Entendiendo Jinja" . docs.saltproject.io .
  10. Jinja y macros | Centro de desarrolladores de dbt
  11. "Bienvenido | Jinja2 (El motor de plantillas de Python)" . palletsprojects.com/p/jinja .
  12. Ronacher, Armin. "Documentación del diseñador de plantillas" . Documentación de Jinja (3.0.x) . Consultado el 9 de enero de 2024. Una plantilla Jinja no necesita tener una extensión específica: .html, .xml o cualquier otra extensión está bien.
  13. "Documentación del diseñador de plantillas — Documentación de Jinja (3.0.x)" . jinja.palletsprojects.com . Consultado el 9 de enero de 2024 .
  • Sitio web oficial