last jinja for comment jinja2

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''}}