Wie testen Sie in Jinja2, ob eine Variable undefiniert ist?


190

Wenn ich von Django konvertiere, bin ich es gewohnt, so etwas zu tun:

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

und es funktionieren zu lassen, wenn ich var1 nicht in den Kontext gestellt habe. Jinja2 gibt mir einen undefinierten Fehler. Gibt es eine einfache Möglichkeit zu sagen {% if var1 == None %}oder ähnliches?

Antworten:


333

Aus der Dokumentation des Jinja2- Vorlagendesigners :

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

Ich glaube, dass dies der Fall ist, aber meine Suchbegriffe spiegeln dies oft nicht wider.
Dannyman

17
Darüber hinaus können Sie {% if variable is not defined %}die Umkehrung testen.
Pbaranay


1
{% if variable is defined and variable %}würde auch auf Leere prüfen
Vivek

32

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

Da not is Noneist das nicht erlaubt, heißt das

{% if variable != None %}

ist wirklich deine einzige Option.


Wenn variableimmer ausgewertet wird, Truewenn nicht Keine, {% if variable != None %}entspricht {% if variable %}.
Azalee

Wenn Sie nach NoneKleinbuchstaben none {% if variable is not none %}
Felipe Alvarez

14

Sie können eine Variable auch 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 %}) würde der obere Code werfen:

UndefinedError: 'step' is undefined

12

Im Umgebungs-Setup hatten wir undefined = StrictUndefined, was verhinderte, dass undefinierte Werte auf irgendetwas gesetzt wurden. Dies hat es behoben:

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

5

Erwägen Sie die Verwendung des Standardfilters, wenn dies erforderlich ist. Beispielsweise:

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

oder verwenden Sie mehr Fallback-Werte mit "hardcoded" am Ende wie:

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

1

{% if variable is defined %} funktioniert, 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 setzen, z

class MainHandler(BaseHandler):
    def get(self):
        var1 = self.request.get('var1', False)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.