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 es Listing).
- 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('_',' ').