En las plantillas Word de Athento puedes mostrar u ocultar contenido con condicionales Jinja.
Clave: muchos metadatos de texto se insertan en el contexto como Listing, no como str. Antes de comparar, convierte y normaliza.
Patrón recomendado (siempre)
Convierte a string, recorta espacios, pasa a minúsculas y unifica guiones bajos/espacios:
{% set valor = campo|string|trim|lower|replace('_', ' ') %}
{% if valor == 'persona física' -%}
... contenido si coincide ...
{%- else -%}
... contenido si NO coincide ...
{%- endif %}
No uses comillas tipográficas (“ ”). Usa comillas rectas
'o".
No metas filtros entre paréntesis; Jinja encadena filtros sin().
Campos Choice (Diccionario)
Lo que se compara es la etiqueta (label) del término, no el value interno.
Aun así, ese label suele llegar como
Listing. Convierte y normaliza:
{# Ej.: metadata_tipodepersona = "Persona Física" (label) #}
{% set tipo = metadata_tipodepersona|string|trim|lower|replace('_', ' ') %}
{% if tipo == 'persona física' -%}
Pinta: El valor del campo es X
{%- else -%}
Pinta: El valor del campo NO es X
{%- endif %}
Campos de texto / área de texto
También llegan como Listing. Usa el mismo patrón:
{% set nombre = metadata_nombre|string|trim %}
{% if nombre %}
Nombre: {{ nombre }}
{% endif %}
Campos booleanos
El parser añade _boolean. Puedes usarlos directamente (ya son booleanos):
{% if metadataprueba_boolean -%}
El campo es true
{%- else -%}
El campo es false
{%- endif %}
Depuración rápida (para saber por qué no entra al if)
Imprime temporalmente el tipo real y el valor:
Tipo real: {{ metadata_tipodepersona.__class__ }}
Valor sin normalizar: {{ metadata_tipodepersona }}
Valor normalizado: {{ (metadata_tipodepersona|string|trim|lower|replace('_', ' ')) }}
Si ves <class 'docxtpl.listing.Listing'>, necesitas |string antes de comparar.
Ejemplo completo (Choice robusto)
{# Campo diccionario con label "Persona Física" #}
{% set tipo = metadata_tipodepersona|string|trim|lower|replace('_', ' ') %}
{% if tipo == 'persona física' -%}
Mostramos bloque para Persona Física.
{%- else -%}
Mostramos bloque alternativo (no PF). Valor: {{ metadata_tipodepersona }}
{%- endif %}
Errores frecuentes (y cómo evitarlos)
Comparar sin convertir:
if campo == "..."→ puede fallar (campo esListing).
✅ Solución:campo|string|trim|lower.Comillas “inteligentes”: rompen el parser.
✅ Solución: usa'o"rectas.Paréntesis en filtros:
({{ campo|string })|trim}→ Jinja no lo necesita y puede fallar.
✅ Solución: encadena sin paréntesis.Espacios invisibles / variantes:
"persona_fisica"vs"Persona Física".
✅ Solución:|lower|replace('_',' ').
Resumen
| Tipo de campo | Cómo comparar de forma segura |
|---|---|
| Choice (Diccionario) | `set v = campo |
| Texto/Área de texto | `set v = campo |
| Booleano | if campo_boolean (sin conversión) |
Comentarios
0 comentarios
Inicie sesión para dejar un comentario.