2010-10-01 4 views
98

Konvertieren von Django, ich bin zu etwas zu tun, so benutzten:In Jinja2, wie testen Sie, ob eine Variable nicht definiert ist?

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

ist und es funktioniert, wenn ich nicht var1 in Zusammenhang gebracht hat. Jinja2 gibt mir einen undefinierten Fehler. Gibt es eine einfache Möglichkeit, {% if var1 == None %} oder ähnliches zu sagen?

Antwort

169

Vom Jinja2 template designer documentation:

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

Dank! Dies funktioniert auch in Ansible Vorlagen! – dannyman

+2

@dannyman vielleicht, weil ansible Vorlagen jinja2 sind? – cherouvim

+0

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

9

Im Setup der Umgebung hatten wir undefined = StrictUndefined, was verhinderte, dass undefinierte Werte auf irgendetwas gesetzt wurden. Dieses regelte es:

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

{% if variable is defined %} arbeitet undefined etwas zu überprüfen, ob ist.

Sie können mit der Verwendung von {% if not var1 %} weg, wenn Sie Ihre Variablen auf False zB

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

Sie auch eine Variable in einem jinja2 Template festlegen könnte Default:

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

und dann können Sie Verwenden Sie es wie folgt:

{% 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 nichtverwenden würden) der obere Code würde werfen:

UndefinedError: 'step' is undefined 
11

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

Da not is None nicht erlaubt ist, das bedeutet, dass

{% if variable != None %}

ist wirklich Ihre einzige Option.

1

Verwenden Sie den Standardfilter, wenn Sie das benötigen. Zum Beispiel:

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

oder so etwas wie:

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