for - Variable de plantilla Jinja2 si None Object establece un valor predeterminado
jinja for last (8)
¿Cómo hacer una variable en jijna2 por defecto a "" si el objeto es None en lugar de hacer algo como esto?
{% if p %}
{{ p.User[''first_name'']}}
{% else %}
NONE
{%endif %}
Entonces, si el objeto p es Ninguno, quiero establecer por defecto los valores de p (first_name y last_name) en "". Básicamente nvl (p.User [first_name ''], "")
Error al recibir: Error: jinja2.exceptions.UndefinedError UndefinedError: ''None'' no tiene atributo ''User''
Para los visitantes de Google, no para el OP.
Si el valor predeterminado que desea son solo espacios para mantener la alineación, puede usar el filtro de format
integrado :
>>> import jinja2
>>> T = jinja2.Template("foo {{ ''%-15s''|format(bar) }} baz")
>>> T.render()
''foo baz''
>>> T.render({''bar'': ''''}) # this is the same as above, except explicit
''foo baz''
>>> T.render({''bar'': ''spam''})
''foo spam baz''
Como adición a otras respuestas, uno puede escribir algo más si la variable es Ninguna como esta:
{{ variable or '''' }}
De acuerdo con los docs , puedes hacer lo siguiente:
{{ p|default('''', true) }}
Causa None
arroja False
en el contexto booleano.
Actualización : Como mencionó Lindes, funciona solo para tipos de datos simples.
Para evitar lanzar una excepción mientras "p" o "p.User" es Ninguno, puede usar:
{{ (p and p.User and p.User[''first_name'']) or "default_value" }}
Por lo general, defino una función nvl
y la coloco en globals
y filters
.
def nvl(*args):
for item in args:
if item is not None:
return item
return None
app.jinja_env.globals[''nvl''] = nvl
app.jinja_env.filters[''nvl''] = nvl
Uso en una plantilla:
<span>Welcome {{ nvl(person.nick, person.name, ''Anonymous'') }}<span>
// or
<span>Welcome {{ person.nick | nvl(person.name, ''Anonymous'') }}<span>
Siguiendo este documento puedes hacer esto de esa manera:
{{ p.User[''first_name'']|default(''NONE'') }}
Utilice la función integrada none
( http://jinja.pocoo.org/docs/templates/#none ):
{% if p is not none %}
{{ p.User[''first_name''] }}
{% else %}
NONE
{%endif %}
o
{{ p.User[''first_name''] if p != None else ''NONE'' }}
o si necesitas una cadena vacía:
{{ p.User[''first_name''] if p != None }}
{{p.User[''first_name''] or ''My default string''}}