246

Djangoから変換すると、私は次のようなことをすることに慣れています。

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

var1をコンテキストに入れなかった場合に機能させることができます。Jinja2で未定義のエラーが発生します。簡単に言う方法{% if var1 == None %}や似たような方法はありますか?

4

7 に答える 7

421

Jinja2テンプレートデザイナーのドキュメントから:

{% if variable is defined %}
    value of variable: {{ variable }}
{% else %}
    variable is not defined
{% endif %}
于 2010-10-01T20:14:28.543 に答える
45

{% if variable is defined %}変数が。の場合はtrueです None

許可されていないのでnot is None、それは

{% if variable != None %}

本当にあなたの唯一の選択肢です。

于 2015-05-21T14:05:33.570 に答える
18

次のように、jinja2テンプレートで変数を定義することもできます。

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

そして、あなたはそれをこのように使うことができます:

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

それ以外の場合(使用しない場合{% set step = 1 %})、上位のコードは次のようにスローします。

UndefinedError: 'step' is undefined
于 2014-09-18T15:01:56.580 に答える
12

環境設定ではundefined = StrictUndefined、があり、未定義の値が何にも設定されないようにしました。これはそれを修正しました:

from jinja2 import Undefined
JINJA2_ENVIRONMENT_OPTIONS = { 'undefined' : Undefined }
于 2010-10-01T20:13:49.223 に答える
7

必要に応じて、デフォルトのフィルターの使用を検討してください。例えば:

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

または、次のように最後に「ハードコードされた」値を使用して、より多くのフォールバック値を使用します。

{% set connectTimeout = config.stackowerflow.connect.timeout | default(config.stackowerflow.timeout) | default(config.timeout) | default(42) -%}
于 2016-03-08T12:18:31.560 に答える
1

{% if variable is defined %}何かが未定義かどうかをチェックするために動作します。

{% if not var1 %}変数をデフォルトでFalseに設定すると、使用を回避できます。

class MainHandler(BaseHandler):
    def get(self):
        var1 = self.request.get('var1', False)
于 2014-02-12T01:14:56.310 に答える
0

Ansibleでこのような問題が発生しました。@Garretと@Carsten/@azaleaの両方の回答でテストを行う必要があったので、次のようになります。

{% if variable is defined and variable %}
    value of variable: {{ variable }}
{% else %}
    variable is not defined or is falsy
{% endif %}
于 2021-06-06T06:49:26.200 に答える