Wie testen Sie in Jinja2, ob eine Variable nicht definiert ist? - Django, Jinja2

Von Django her bin ich es gewohnt, so etwas zu tun:

{% if not var1 %} {% endif %}

und es funktioniert, wenn ich nicht var1 in den Kontext gesetzt habe. Jinja2 gibt mir einen undefinierten Fehler. Gibt es einen einfachen Weg zu sagen {% if var1 == None %} o.ä?

Antworten:

183 für die Antwort № 1

Von der Jinja2 Vorlage Designer-Dokumentation:

{% if variable is defined %}
value of variable: {{ variable }}
{% else %}
variable is not defined
{% endif %}

11 für die Antwort № 2

{% if variable is defined %} ist wahr, wenn die Variable ist None.

Schon seit not is None nicht erlaubt ist, das heißt das

{% if variable != None %}

ist wirklich deine einzige Option.


10 für die Antwort № 3

In der Umgebung hatten wir Setup undefined = StrictUndefined, was verhinderte, dass undefinierte Werte auf irgendetwas gesetzt wurden. Das hat es behoben:

from jinja2 import Undefined
JINJA2_ENVIRONMENT_OPTIONS = { "undefined" : Undefined }

7 für die Antwort № 4

Sie könnten auch eine Variable in einer jinja2-Vorlage wie folgt definieren:

{% if step is not defined %}
{% set step = 1 %}
{% endif %}

Und dann kannst du es so benutzen:

{% 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 %}

Sonst (wenn Sie nicht verwenden würden {% set step = 1 %}) Der obere Code würde werfen:

UndefinedError: "step" is undefined

1 für die Antwort № 5

{% if variable is defined %} funktioniert, um zu prüfen, ob etwas undefiniert ist.

Sie können damit davonkommen {% if not var1 %} Wenn Sie Ihre Variablen auf False setzen, z

class MainHandler(BaseHandler):
def get(self):
var1 = self.request.get("var1", False)

1 für die Antwort № 6

Überlegen Sie, ob Sie den Standardfilter verwenden möchten. Beispielsweise:

{% set host = jabber.host | default(default.host) -%}

oder so etwas wie:

{% set timeout = config.timeout | default(42) -%}