Django template variable value to string literal comparison fails

╄→尐↘猪︶ㄣ 提交于 2019-12-06 18:21:56

问题


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?


回答1:


A couple of possibilities:

  1. The .shift string has extra whitespace. Use this to double-check:

    {% for watchinstance in watchinstance_list %}
        X{{ watchinstance.shift }}X
    {% endfor %}
    
  2. 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.




回答2:


So after searching Django docs for 2 hours, I finally found a way to make it work:

{% if watchinstance.shift|stringformat:"s" == "DAY"  %}


来源:https://stackoverflow.com/questions/3732106/django-template-variable-value-to-string-literal-comparison-fails

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!