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?

War es hilfreich?

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)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top