2010-10-01 23 views

Respuesta

169

Desde el Jinja2 template designer documentation:

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

Gracias! ¡Esto también funciona en las plantillas de Ansible! – dannyman

+2

@dannyman tal vez sea porque las plantillas ansible son jinja2? – cherouvim

+0

Creo que este es el caso, pero mis términos de búsqueda a menudo no reflejan eso. – dannyman

9

En la configuración de entorno, teníamos undefined = StrictUndefined, lo que impedía que los valores indefinidos se establecieran en todo. Esto lo arregló:

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

{% if variable is defined %} funciona para comprobar si algo no está definido.

Puede salir con el uso {% if not var1 %} si por defecto las variables a, por ejemplo Falso

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

También puede definir una variable en una plantilla Jinja2 así:

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

y luego se puede Úselo así:

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

De lo contrario (si no quiere usar {% set step = 1 %}) el código superior lanzaría:

UndefinedError: 'step' is undefined 
11

{% if variable is defined %} es cierto si la variable es None.

Desde not is None no está permitido, eso significa que

{% if variable != None %}

es realmente la única opción.

1

Considere usar el filtro predeterminado si es lo que necesita. Por ejemplo:

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

o algo así:

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