Inicio › Herramientas para desarrolladores › Probador de plantillas Jinja2

Probador de plantillas Jinja2

Pega una plantilla Jinja2 y sus variables en YAML o JSON y ve el resultado renderizado mientras escribes. Ejecuta la biblioteca Jinja2 real (Python, mediante Pyodide) dentro de tu navegador, así que los espacios en blanco, los filtros y los mensajes de error coinciden con lo que obtienes en Ansible, Flask o Salt.

Última actualización:

Entorno
Ctrl + Intro renderiza


Publicidad
Publicidad

Cómo usar Probador de plantillas Jinja2

  1. Elige un ejemplo o pega tu plantilla en el cuadro Plantilla (por ejemplo, un archivo .j2 de Ansible).
  2. Introduce las variables en YAML o JSON en el cuadro Variables. El nivel superior deben ser pares clave: valor.
  3. Elige la variante: Jinja2 simple, Ansible (filtros extra, undefined estricto, trim_blocks) o Flask (autoescape).
  4. Lee la salida. Se actualiza mientras escribes; activa Mostrar espacios en blanco para ver espacios sobrantes y líneas vacías.
  5. Corrige cualquier error con el número de línea resaltado y la pista, y luego copia o descarga el texto renderizado.

Sintaxis de Jinja2 de un vistazo

SintaxisQué haceEjemplo
{{ … }}Imprime una expresión{{ user.name | upper }}
{% … %}Sentencia: if, for, set, macro, block{% if port == 443 %}ssl{% endif %}
{# … #}Comentario, no se imprime{# TODO: add IPv6 #}
{%- … -%}Elimina los espacios en blanco antes / después de la etiqueta{%- for x in xs -%}
| filterTransforma un valor; los filtros se pueden encadenar{{ hosts | sort | join(', ') }}
is testComprueba un valor{% if port is number %}, is defined
loop.*Ayudantes de bucle dentro de forloop.index, loop.first, loop.last, loop.cycle('a','b')
namespace()Conserva un valor que cambia dentro de un bucle{% set ns = namespace(total=0) %}
~Une valores como cadenas{{ 'v' ~ version }}

Filtros integrados útiles

FiltroEjemploResultado
default{{ port | default(8080) }}8080 cuando port no está definido
join{{ ['a','b'] | join('-') }}a-b
map / selectattr{{ users | selectattr('active') | map(attribute='name') | list }}nombres de los usuarios activos
groupby{% for k, items in rows | groupby('region') %}filas agrupadas por región
dictsort{% for k, v in cfg | dictsort %}elementos del diccionario ordenados por clave
format{{ '%.2f' | format(3.14159) }}3.14
indent{{ block | indent(4) }}sangra cada línea después de la primera con 4 espacios
tojson{{ data | tojson }}JSON seguro para HTML en scripts
truncate / wordcount{{ text | truncate(20) }}texto acortado que termina en ...

Consejos para depurar plantillas

  • Activa undefined estricto mientras pruebas. Así, una variable mal escrita lanza un error con su número de línea en lugar de no imprimir nada.
  • Cuidado con los nombres de métodos de dict. Las claves llamadas items, keys, values o get deben leerse con corchetes: data['items'].
  • Las variables definidas dentro de un bucle no sobreviven al bucle. Usa namespace() para contadores y totales.
  • Usa | int o | float antes de hacer cálculos con valores que vienen de cadenas YAML o de facts de Ansible.
  • Marca como seguro solo el HTML de confianza. Con autoescape activado, | safe imprime HTML sin escapar, lo que puede permitir que una entrada no fiable inyecte marcado.

Preguntas frecuentes

¿Es el Jinja2 real o una imitación en JavaScript?

Es la biblioteca Python Jinja2 real. La página carga Pyodide, una versión de Python para el navegador, junto con los paquetes oficiales Jinja2 y PyYAML, y renderiza tu plantilla con ellos. La primera carga descarga unos 10 MB de una CDN pública; después tu navegador lo guarda en caché. Tu plantilla y tus variables nunca salen de tu dispositivo.

¿Puedo probar aquí plantillas de Ansible?

Sí. Elige la variante Ansible: activa trim_blocks y keep_trailing_newline como el módulo template, hace que las variables no definidas den error y añade filtros habituales de Ansible como to_nice_yaml, to_json, regex_replace, regex_search, combine, dict2items, ternary, bool, b64encode, basename y flatten. Los lookups, facts y plugins de Ansible no están disponibles, así que define tú mismo facts como ansible_hostname en las variables.

¿Por qué mi salida tiene líneas vacías de más?

Cada etiqueta {% … %} deja el salto de línea que la sigue. Activa trim_blocks para eliminar el primer salto de línea tras una etiqueta de bloque, lstrip_blocks para quitar la sangría anterior, o añade un signo menos dentro de la etiqueta, como en {%- if x -%}, para eliminar los espacios en blanco de ese lado. Mostrar espacios en blanco marca los espacios con puntos y los finales de línea con ¶.

¿Qué pasa con las variables no definidas?

Con el ajuste predeterminado, una variable no definida se renderiza como una cadena vacía, lo que puede ocultar errores de escritura. Estricto lanza un UndefinedError con el número de línea, como hace Ansible. Encadenable te permite escribir a.b.c sobre valores inexistentes sin errores, y Depuración imprime el marcador, por ejemplo {{ missing_var }}. Las etiquetas bajo la salida enumeran cada variable que usa la plantilla y marcan las que no has definido.

¿Por qué obtengo 'builtin_function_or_method' object is not iterable?

Tus datos tienen una clave llamada items, keys o values, y order.items encuentra el método del dict de Python en lugar de tu lista. Escribe order['items'] en su lugar, o cambia el nombre de la clave. Lo mismo ocurre con otros nombres de métodos de dict como update, get o pop.

¿Por qué yes u on en YAML se convierten en true?

Las variables se leen con PyYAML, que sigue YAML 1.1, las mismas reglas que usa Ansible. En YAML 1.1, yes, no, on y off son booleanos. Pon el valor entre comillas ("yes") si necesitas el texto.

¿Admite macros, includes y herencia de plantillas?

Las macros, los bloques call, los filtros, los tests, los bucles con loop.index, set con namespace(), do y break/continue funcionan en la plantilla que pruebas. include, import y extends necesitan otros archivos de plantilla, que este probador no tiene, así que pon las macros en la misma plantilla o pega dentro el contenido de la plantilla padre.

¿Se prueban todas las herramientas de FreeToolCabin para comprobar su calidad y precisión?

Sí. Cada herramienta del sitio pasa pruebas automáticas en navegadores reales para comprobar que el resultado es correcto y que no hay errores. Si encuentras un fallo o tienes una sugerencia, escríbenos a [email protected] y lo revisaremos.

Herramientas relacionadas

Ver todas las de Generadores de código →