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
- ↑ "Historial de lanzamientos de Jinja2" . Consultado el 24 de junio de 2020 .
- ↑ "Versión 3.1.6" . 5 de marzo de 2025. Consultado el 25 de marzo de 2025 .
- ↑ "Extensiones" . Documentación de Jinja2 (2.8-dev) . Consultado el 26 de mayo de 2015 .
- 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 .
- ↑ "Extensiones" . Documentación de Jinja2 (2.8-dev) . Consultado el 26 de mayo de 2015 .
- ↑ 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 .
- ↑ Asistente, Hogar. "Plantillas" . Asistente del hogar . Consultado el 16 de octubre de 2025 .
- ↑ "Plantillas (Jinja2) — Documentación de Ansible" .
- ↑ "Entendiendo Jinja" . docs.saltproject.io .
- ↑ Jinja y macros | Centro de desarrolladores de dbt
- ↑ "Bienvenido | Jinja2 (El motor de plantillas de Python)" . palletsprojects.com/p/jinja .
- ↑ 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.
- ↑ "Documentación del diseñador de plantillas — Documentación de Jinja (3.0.x)" . jinja.palletsprojects.com . Consultado el 9 de enero de 2024 .
Enlaces externos
- Sitio web oficial
- Software libre programado en Python
- Software de sistema gratuito
- Bibliotecas de Python (lenguaje de programación)
- Software programado en Python
- Motores de plantillas
- Software que utiliza la licencia BSD.