Django模板变量值与字符串字面量比较失败

17

我在模板中有以下代码,旨在将watchinstance.shift的值(可能是"DAY"或"NIGHT")与字符串"DAY"进行比较。但比较始终失败。

我在模板里写了下面这段代码,目的是比较watchinstance.shift的值(可能是"DAY"或者"NIGHT")和字符串"DAY"是否相等,但是比较总是失败。

{% for watchinstance in watchinstance_list %}
    {% if watchinstance.shift == "DAY" %}
        <p>shift is DAY</p>
    {% endif %}
{% endfor %}

使用ifequal也不起作用:

{% for watchinstance in watchinstance_list %}
    {% ifequal watchinstance.shift "DAY" %}
        <p>shift is DAY</p>
    {% endifequal %}
{% endfor %}

然而,只需调用{{ watchinstance.shift }}即可按预期工作:

{% for watchinstance in watchinstance_list %}
    {{ watchinstance.shift }}
{% endfor %}

返回白天(DAYs)和黑夜(NIGHTs)。

我检查了watchinstance.shift是否返回任何额外字符,看起来它并没有... 那么我还可能错过了什么?

2个回答

51

在浏览了2个小时的Django文档后,我终于找到了一种使它能够工作的方法:


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

1
我之前使用了上述方法,但在我的情况下遇到了“无法解析剩余部分:'=='IP'' from 'item.status=='IP''”的问题。问题最终是由于“==”前后缺少空格导致的。如果在“==”前后没有空格,则无法正常工作。希望能对某些人有所帮助。 - Subbu

11
有两种可能:
  1. .shift字符串中有额外的空格。使用以下方法进行双重检查:

    {% for watchinstance in watchinstance_list %}
        X{{ watchinstance.shift }}X
    {% endfor %}
    
  2. `.shift` 属性不是字符串,而是一个可以转化成 "DAY" 或者 "NIGHT" 的对象。在这种情况下,变量替换 {{ watchinstance.shift }} 看起来像字符串一样,但是 {% ifequal watchinstance.shift "DAY" %} 中的比较会失败。


是的,那是我最初检查额外字符的方法。但是没有发现任何问题。 - Sir Conquer
  1. 我本来就怀疑这与此有关!确实是一个外键引用到shift模型的实例!在搜索了两个小时后,我终于找到了将其转化为字符串的方法!
- Sir Conquer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接