Wie testen Sie in Jinja2, ob eine Variable undefiniert ist?
-
27-09-2019 - |
Frage
Wenn ich aus Django konvertiere, bin ich es gewohnt, so etwas zu tun:
{% if not var1 %} {% endif %}
und es funktioniert, wenn ich VAR1 nicht in den Kontext gesteckt habe. Jinja2 gibt mir einen undefinierten Fehler. Gibt es eine einfache Möglichkeit zu sagen? {% if var1 == None %}
oder ähnliches?
Lösung
Aus dem Jinja2 Template Designer -Dokumentation:
{% if variable is defined %}
value of variable: {{ variable }}
{% else %}
variable is not defined
{% endif %}
Andere Tipps
{% if variable is defined %}
ist wahr, wenn die Variable ist None
.
Seit not is None
nicht erlaubt, das bedeutet das
{% if variable != None %}
ist wirklich Ihre einzige Option.
In der Umgebungsaufstellung hatten wir undefined = StrictUndefined
, was verhinderte, dass undefinierte Werte auf irgendetwas eingestellt wurden. Dies hat es behoben:
from jinja2 import Undefined
JINJA2_ENVIRONMENT_OPTIONS = { 'undefined' : Undefined }
Sie können auch eine Variable in einer Jinja2 -Vorlage wie folgt definieren:
{% if step is not defined %}
{% set step = 1 %}
{% endif %}
Und dann können Sie es so verwenden:
{% if step == 1 %}
<div class="col-xs-3 bs-wizard-step active">
{% elif step > 1 %}
<div class="col-xs-3 bs-wizard-step complete">
{% else %}
<div class="col-xs-3 bs-wizard-step disabled">
{% endif %}
Andernfalls (wenn Sie nicht verwenden würden {% set step = 1 %}
) Der obere Code würde werfen:
UndefinedError: 'step' is undefined
Erwägen Sie, den Standardfilter zu verwenden, wenn Sie das benötigen. Zum Beispiel:
{% set host = jabber.host | default(default.host) -%}
Oder verwenden Sie mehr Fallback -Werte mit "hartcodiert" am Ende wie:
{% set connectTimeout = config.stackowerflow.connect.timeout | default(config.stackowerflow.timeout) | default(config.timeout) | default(42) -%}
{% if variable is defined %}
arbeitet, um zu überprüfen, ob etwas undefiniert ist.
Sie können mit der Verwendung davonkommen {% if not var1 %}
Wenn Sie Ihre Variablen standardmäßig auf false z.
class MainHandler(BaseHandler):
def get(self):
var1 = self.request.get('var1', False)