Django template variable value to string literal comparison fails
I have the following code in my template that supposed to compare the value of watchinstance.shift
, which can be either "DAY" or "NIGHT", to a literal string "DAY". The comparisson always fails.
{% for watchinstance in watchinstance_list %}
{% if watchinstance.shift == "DAY" %}
<p>shift is DAY</p>
{% endif %}
{% endfor %}
Using ifequal
doesn't work either:
{% for watchinstance in watchinstance_list %}
{% ifequal watchinstance.shift "DAY" %}
<p>shift is DAY</p>
{% endifequal %}
{% endfor %}
However, just calling {{ watchinstance.shift }}
works as expected:
{% for watchinstance in watchinstance_list %}
{{ watchinstance.shift }}
{% endfor %}
returns DAYs and NIGHTs.
I checked whether watchinstance.shift
returns any extra characters,开发者_开发技巧 and it doesn't look like it does... What else can I be missing here?
So after searching Django docs for 2 hours, I finally found a way to make it work:
{% if watchinstance.shift|stringformat:"s" == "DAY" %}
A couple of possibilities:
The .shift string has extra whitespace. Use this to double-check:
{% for watchinstance in watchinstance_list %} X{{ watchinstance.shift }}X {% endfor %}
The .shift attribute isn't a string, but an object that stringifies to "DAY" or "NIGHT". In that case, the variable substitution in
{{ watchinstance.shift }}
would look the same as a string, but the comparison in{% ifequal watchinstance.shift "DAY" %}
would fail.
精彩评论