Trong Jinja2, làm thế nào để bạn kiểm tra nếu một biến không được xác định?


190

Chuyển đổi từ Django, tôi đã quen làm một cái gì đó như thế này:

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

và làm cho nó hoạt động nếu tôi không đặt var1 vào bối cảnh. Jinja2 cho tôi một lỗi không xác định. Có một cách dễ dàng để nói {% if var1 == None %}hoặc tương tự?

Câu trả lời:


333

Từ tài liệu thiết kế mẫu Jinja2 :

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

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

17
Ngoài ra, bạn có thể sử dụng {% if variable is not defined %}để kiểm tra nghịch đảo.
pbaranay


1
{% if variable is defined and variable %}cũng sẽ kiểm tra sự trống rỗng
Vivek

32

{% if variable is defined %}là đúng nếu biến là None.

not is Nonekhông được phép, điều đó có nghĩa là

{% if variable != None %}

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


Nếu variableluôn được ước tính Truekhi không Không, {% if variable != None %}tương đương với {% if variable %}.
hoa đỗ quyên

Nếu bạn muốn kiểm tra Nonesử dụng chữ thườngnone {% if variable is not none %}
Felipe Alvarez

14

Bạn cũng có thể định nghĩa một biến trong 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 %}

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

UndefinedError: 'step' is undefined

12

Trong thiết lập Môi trường, chúng tôi đã undefined = StrictUndefinedngăn chặn các giá trị không xác định được đặt thành bất kỳ thứ gì. Điều này đã sửa nó:

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

5

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 sử dụng nhiều giá trị dự phòng hơn với giá trị "mã hóa cứng" ở cuối như:

{% set connectTimeout = config.stackowerflow.connect.timeout | default(config.stackowerflow.timeout) | default(config.timeout) | default(42) -%}

1

{% if variable is defined %} hoạt động để kiểm tra nếu một cái gì đó không được xác định.

Bạn có thể thoát khỏi việc sử dụng {% if not var1 %}nếu bạn mặc định các biến của mình thành Sai, ví dụ:

class MainHandler(BaseHandler):
    def get(self):
        var1 = self.request.get('var1', False)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.