Comment rendre une variable dans jijna2 par défaut à "" si l'objet est None au lieu de faire quelque chose comme ça?
{% if p %}
{{ p.User['first_name']}}
{% else %}
NONE
{%endif %}
Donc, si l'objet p est None, je veux que les valeurs de p (prénom et nom) soient définies par défaut sur "". Fondamentalement nvl (p.Utilisateur [prenom '], "")
Erreur lors de la réception: Erreur: jinja2.exceptions.UndefinedError UndefinedError: "Aucun" n'a pas d'attribut "Utilisateur".
Utilisez la fonction intégrée none
( http://jinja.pocoo.org/docs/templates/#none ):
{% if p is not none %}
{{ p.User['first_name'] }}
{% else %}
NONE
{%endif %}
ou
{{ p.User['first_name'] if p != None else 'NONE' }}
ou si vous avez besoin d'une chaîne vide:
{{ p.User['first_name'] if p != None }}
{{p.User['first_name'] or 'My default string'}}
Selon docs vous pouvez simplement faire:
{{ p|default('', true) }}
Cause None
transforme en False
dans un contexte booléen.
Update : Comme mentionné par Lindes, cela ne fonctionne que pour des types de données simples.
En plus d’autres réponses, on peut écrire autre chose si la variable est None comme ceci:
{{ variable or '' }}
Après cette doc vous pouvez le faire de cette façon:
{{ p.User['first_name']|default('NONE') }}
Pour éviter de lever une exception alors que "p" ou "p.User" vaut Aucun, vous pouvez utiliser:
{{ (p and p.User and p.User['first_name']) or "default_value" }}
Autre solution (similaire à certaines précédentes):
{{ ( p is defined and p.User is defined and p.User['first_name'] ) |default("NONE", True) }}
Notez que la dernière variable (p.User ['prenom']) n'a pas le test if defined
après.
Je définis habituellement une fonction nvl
et la mets dans globals
et 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
Utilisation dans un template:
<span>Welcome {{ nvl(person.nick, person.name, 'Anonymous') }}<span>
// or
<span>Welcome {{ person.nick | nvl(person.name, 'Anonymous') }}<span>
À partir de la version 2.8, vous pouvez simplement utiliser:
{{ p.User['first_name'] }}
Voir https://docs.ansible.com/ansible/latest/porting_guides/porting_guide_2.8.html#jinja-undefined-values