Wie mache ich eine Variable in jijna2 standardmäßig auf "", wenn das Objekt None ist, anstatt so etwas zu tun?
{% if p %}
{{ p.User['first_name']}}
{% else %}
NONE
{%endif %}
Wenn also Objekt p Keine ist, möchte ich die Werte von p (Vorname und Nachname) standardmäßig auf "" setzen. Grundsätzlich
nvl(p.User[first_name'], "")
Fehler beim Empfang:
Error: jinja2.exceptions.UndefinedError
UndefinedError: 'None' has no attribute 'User'
p
Never Return zurückgegeben hatNone
. AnstelleNone
der Funktion sollte ein Proxy-Objekt zurückgegeben werden, das dieselbe Struktur wie ein reales Objekt hat, jedoch mit den gewünschten Standardwerten geladen ist.Antworten:
Verwenden Sie die
none
integrierte Funktion ( http://jinja.pocoo.org/docs/templates/#none ):oder
oder wenn Sie eine leere Zeichenfolge benötigen:
quelle
none
in der Antwort. Mein Problem wurde gelöst, nachdem ich den Fall von None korrigiert hatte.quelle
Laut Dokumentation können Sie einfach Folgendes tun:
Ursache
None
wirft aufFalse
in Booleschen Kontext.Update : Wie bereits erwähnt, funktioniert es nur für einfache Datentypen.
quelle
default
genau das, was ich für meinen speziellen Fall brauchte, also ... einfach nicht abstimmen. (Eine Änderung dieser Antwort könnte durchaus eine positive Bewertung bringen, außer dass ich denke, dass es wahrscheinlich schwierig ist, sichdefault
auf diese Situation zuZusätzlich zu anderen Antworten kann man etwas anderes schreiben, wenn die Variable None wie folgt ist:
quelle
x or y
istif x is false, then y, else x
. Siehe: 5.2. Boolesche Operationen - und oder nichtNach diesem Dokument können Sie diese auf diese Weise tun:
quelle
Um zu vermeiden, dass eine Ausnahme ausgelöst wird, während "p" oder "p.User" None ist, können Sie Folgendes verwenden:
quelle
Als eine andere Lösung (ähnlich wie bei einigen vorherigen):
Beachten Sie, dass die letzte Variable (p.User ['first_name']) keinen
if defined
Test danach hat.quelle
Normalerweise definiere ich eine
nvl
Funktion und setze sie inglobals
undfilters
.Verwendung in einer Vorlage:
quelle
Ab Ansible 2.8 können Sie einfach Folgendes verwenden:
Siehe https://docs.ansible.com/ansible/latest/porting_guides/porting_guide_2.8.html#jinja-undefined-values
quelle