¿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'
p
nunca volverNone
. En lugar deNone
la 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
none
función integrada ( http://jinja.pocoo.org/docs/templates/#none ):o
o si necesitas una cadena vacía:
fuente
none
en la respuesta. Mi problema se resolvió después de corregir el caso de None.fuente
Según los documentos , puedes hacer:
Causa
None
conversionesFalse
en contexto booleano.Actualización : como se mencionó en lindes, funciona solo para tipos de datos simples.
fuente
default
es 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 aplicarladefault
a esta situación)Además de otras respuestas, uno puede escribir algo más si la variable es Ninguna como esta:
fuente
x or y
esif 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 defined
prueba después.fuente
Normalmente defino una
nvl
función y la pongo englobals
yfilters
.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