{% if bCat2 == True %}
<div>True</div>
{% else %}
<div>False</div>
Returns <div>False</div>
even when bCat2
is True
.
Thanks,
Andrew
{% if bCat2 == True %}
<div>True</div>
{% else %}
<div>False</div>
Returns <div>False</div>
even when bCat2
is True
.
Thanks,
Andrew
Solve that like python do.
{% if bCat2 %}
<div>True</div>
{% else %}
<div>False</div>
{% if not bCat2 %}
<div>False</div>
{% else %}
<div>True</div>
Solve like jinja2 do. Becareful with boolean lowercase.
{% if bCat2 is sameas true %}
<div>True</div>
{% endif %}
{% if bCat2 is sameas false %}
<div>False</div>
{% endif %}
--extra-vars='bCat2='
–
Mellar This part of documentation can help you:
The special constants true, false and none are indeed lowercase. Because that caused confusion in the past, when writing True expands to an undefined variable that is considered false, all three of them can be written in title case too (True, False, and None). However for consistency (all Jinja identifiers are lowercase) you should use the lowercase versions.
Source: http://jinja.pocoo.org/docs/templates/
Try that code:
{% if bCat2 == true %}
<div>True</div>
{% else %}
<div>False</div>
{% endif %}
Solve that like python do.
{% if bCat2 %}
<div>True</div>
{% else %}
<div>False</div>
{% if not bCat2 %}
<div>False</div>
{% else %}
<div>True</div>
Solve like jinja2 do. Becareful with boolean lowercase.
{% if bCat2 is sameas true %}
<div>True</div>
{% endif %}
{% if bCat2 is sameas false %}
<div>False</div>
{% endif %}
--extra-vars="bCat2=True"
. This won't work, because the command line app makes a bCat2 var with type string. Better is to use json here: --extra-vars='{ "bCat2": true }'
. –
Ralf --extra-vars='bCat2='
–
Mellar The proper way to do this in Jinja2 is:
{% if bCat2 is sameas true %}
<div>True</div>
{% elif bCat2 is sameas false %}
<div>False</div>
{% endif %}
The reason why you cannot do
{% if bCat2 == true %}
is that if bCat2 == 1 or bCat2 == 1.0 it will also be considered True.
To test a Boolean variable in a template, convert it to a string in Python
str(bCat2)
and then compared it to a string in the template
{% if bCat2 == 'True' %}
<div>True</div>
{% else %}
<div>False</div>
I would like to add that if your logic is a bit more complex you might want to read about scopes.
As mentioned in official documentation:
As of version 2.10 more complex use cases can be handled using namespace objects which allow propagating of changes across scopes:
{% 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 }}
take this:
{% if bCat2 is true %}
<div>True</div>
{% else %}
<div>False</div>
{% endif %}
my test:
$ python -m pip install j2cli
$ j2 <(echo "{% if false is true %}
<div>True</div>
{% else %}
<div>False</div>
{% endif %}")
<div>False</div>
$ j2 <(echo "{% if true is true %}
<div>True</div>
{% else %}
<div>False</div>
{% endif %}")
<div>True</div>
© 2022 - 2024 — McMap. All rights reserved.
--extra-vars="bCat2=True"
. This won't work, because the command line app makes a bCat2 var with type string. Better is to use json here:--extra-vars='{ "bCat2": true }'
. – Ralf