2010-10-01 11 views

risposta

169

Dal Jinja2 template designer documentation:

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

Grazie! Funziona anche con i modelli di Ansible! – dannyman

+2

@dannyman forse perché i modelli ansible sono jinja2? – cherouvim

+0

Credo che sia così, ma i miei termini di ricerca spesso non lo riflettono. – dannyman

9

Nella configurazione Ambiente, avevamo undefined = StrictUndefined, che impediva di impostare valori non definiti su qualsiasi cosa. Questo è stato risolto:

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

{% if variable is defined %} funziona per controllare se qualcosa non è definito.

Si può ottenere via con l'utilizzo di {% if not var1 %} se di default le variabili su False ad esempio

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

Si potrebbe anche definire una variabile in un modello Jinja2 come questo:

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

e poi si può utilizzare in questo modo:

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

In caso contrario (se non si desidera utilizzare {% set step = 1 %}) il codice in alto avrebbe gettato:

UndefinedError: 'step' is undefined 
11

{% if variable is defined %} è vero se la variabile è None.

Dal not is None non è consentito, ciò significa che

{% if variable != None %}

è davvero l'unica opzione.

1

Considerare l'utilizzo del filtro predefinito se è quello che ti serve. Per esempio:

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

o qualcosa di simile:

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