¿Cómo hacer que una variable en jijna2 sea "" predeterminada si el objeto es Ninguno en lugar de hacer algo como esto?
{% if p %}
{{ p.User['first_name']}}
{% else %}
NONE
{%endif %}
Entonces, si el objeto p es Ninguno, quiero predeterminar los valores de p (nombre y apellido) a "". Básicamente
nvl(p.User[first_name'], "")
Error al recibir:
Error: jinja2.exceptions.UndefinedError
UndefinedError: 'None' has no attribute 'User'

pnunca volverNone. En lugar deNonela función, debería devolver un objeto proxy que tenga la misma estructura que un objeto real pero que esté cargado con los valores predeterminados que desee.Respuestas:
Use la
nonefunción integrada ( http://jinja.pocoo.org/docs/templates/#none ):o
o si necesitas una cadena vacía:
fuente
noneen la respuesta. Mi problema se resolvió después de corregir el caso de None.fuente
Según los documentos , puedes hacer:
Causa
NoneconversionesFalseen contexto booleano.Actualización : como se mencionó en lindes, funciona solo para tipos de datos simples.
fuente
defaultes exactamente lo que necesitaba para mi caso particular, así que ... simplemente no votar. (Una edición de esta respuesta podría ganar un voto positivo, excepto que creo que es difícil aplicarladefaulta esta situación)Además de otras respuestas, uno puede escribir algo más si la variable es Ninguna como esta:
fuente
x or yesif x is false, then y, else x. Ver: 5.2. Operaciones booleanas - y, o noDespués de este documento , puede hacerlo de esa manera:
fuente
Para evitar lanzar una excepción mientras "p" o "p.User" es None, puede usar:
fuente
Como otra solución (algo similar a algunas anteriores):
Tenga en cuenta que la última variable (p.User ['first_name']) no tiene la
if definedprueba después.fuente
Normalmente defino una
nvlfunción y la pongo englobalsyfilters.Uso en una plantilla:
fuente
A partir de Ansible 2.8, puede usar:
Ver https://docs.ansible.com/ansible/latest/porting_guides/porting_guide_2.8.html#jinja-undefined-values
fuente