{% if bCat2 == True %}
<div>True</div>
{% else %}
<div>False</div>
戻り値 <div>False</div>
ときでさえ bCat2
はTrue
です。ありがとう、アンドリュー
テンプレートでブール変数をテストするには、Pythonでそれを文字列に変換します
str(bCat2)
そしてそれをテンプレートの文字列と比較しました
{% if bCat2 == 'True' %}
<div>True</div>
{% else %}
<div>False</div>
ドキュメントのこの部分は、次のことに役立ちます。
特別な定数true、false、noneは実際には小文字です。これにより過去に混乱が生じたため、Trueを書き込むとfalseと見なされる未定義の変数に展開され、3つすべてがタイトルケース(True、False、None)で書き込まれる可能性があります。ただし、一貫性を保つために(すべてのJinja識別子は小文字です)小文字のバージョンを使用する必要があります。
出典: http://jinja.pocoo.org/docs/templates/
そのコードを試してください:
{% if bCat2 == true %}
<div>True</div>
{% else %}
<div>False</div>
{% endif %}
Jinja2でこれを行う適切な方法は次のとおりです。
{% if bCat2 is sameas true %}
<div>True</div>
{% Elif bCat2 is sameas false %}
<div>False</div>
{% endif %}
できない理由
{% if bCat2 == true %}
つまり、bCat2 == 1またはbCat2 == 1.0の場合もTrueと見なされます。
pythonのようにそれを解決します。
{% if bCat2 %}
<div>True</div>
{% else %}
<div>False</div>
{% if not bCat2 %}
<div>False</div>
{% else %}
<div>True</div>
Jinja2のように解決します。 ブール小文字の注意。
{% if bCat2 is sameas true %}
<div>True</div>
{% endif %}
{% if bCat2 is sameas false %}
<div>False</div>
{% endif %}
ロジックがもう少し複雑な場合は、スコープについて読みたいと思うかもしれないことを付け加えたいと思います。
公式ドキュメント で述べたように:
バージョン2.10以降では、名前空間オブジェクトを使用して、より複雑なユースケースを処理できます。これにより、スコープ全体に変更を伝達できます。
{% set ns = namespace(found=false) %}
{% for item in items %}
{% if item.check_something() %}
{% set ns.found = true %}
{% endif %}
* {{ item.title }}
{% endfor %}
Found item having something: {{ ns.found }}