2010-10-01 41 views

Trả lời

169

Từ Jinja2 template designer documentation:

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

Cảm ơn! Điều này cũng hoạt động trong các mẫu Ansible! – dannyman

+2

@ dannyman có lẽ đó là vì các mẫu không thể đọc được là jinja2? – cherouvim

+0

Tôi tin rằng đây là trường hợp nhưng cụm từ tìm kiếm của tôi thường không phản ánh điều đó. – dannyman

9

Trong thiết lập Môi trường, chúng tôi có undefined = StrictUndefined, ngăn các giá trị không xác định được đặt thành bất kỳ giá trị nào. Này cố định nó:

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

{% if variable is defined %} hoạt động để kiểm tra xem một cái gì đó là không xác định.

Bạn có thể nhận được ngay với sử dụng {% if not var1 %} nếu bạn mặc định các biến của bạn để ví dụ False

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

Bạn cũng có thể định nghĩa một biến trong một mẫu jinja2 như thế này:

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

Và Sau đó bạn có thể sử dụng nó như thế này:

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

Nếu không (nếu bạn không sử dụng {% set step = 1 %}) mã trên sẽ ném:

UndefinedError: 'step' is undefined 
11

{% if variable is defined %} là true nếu biến là None.

Kể từ not is None không được cho phép, đó có nghĩa là

{% if variable != None %}

thực sự là lựa chọn duy nhất của bạn.

1

Cân nhắc sử dụng bộ lọc mặc định nếu đó là những gì bạn cần. Ví dụ:

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

hoặc một cái gì đó như:

{% set timeout = config.timeout | default(42) -%} 
Các vấn đề liên quan