Djangoから変換して、私はこのようなことをするのに慣れています:
{% if not var1 %} {% endif %}
var1をコンテキストに入れなかった場合に機能します。 Jinja2では未定義のエラーが発生します。 {% if var1 == None %}
などと簡単に言う方法はありますか?
Jinja2から テンプレートデザイナーのドキュメント :
{% if variable is defined %}
value of variable: {{ variable }}
{% else %}
variable is not defined
{% endif %}
変数がNone
の場合、{% if variable is defined %}
はtrueです。
not is None
は許可されないため、それはつまり
{% if variable != None %}
本当に唯一の選択肢です。
次のように、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
環境設定では、undefined = StrictUndefined
があり、未定義の値が何にも設定されないようにしました。これにより修正されました。
from jinja2 import Undefined
JINJA2_ENVIRONMENT_OPTIONS = { 'undefined' : Undefined }
必要な場合は、デフォルトのフィルターの使用を検討してください。例えば:
{% set Host = Jabber.Host | default(default.Host) -%}
または、最後に「ハードコード化された」フォールバック値を使用します。
{% set connectTimeout = config.stackowerflow.connect.timeout | default(config.stackowerflow.timeout) | default(config.timeout) | default(42) -%}
{% if variable is defined %}
は、何かが未定義であるかどうかを確認するために機能します。
変数をデフォルトのFalseにすると、{% if not var1 %}
を使用して回避できます
class MainHandler(BaseHandler):
def get(self):
var1 = self.request.get('var1', False)