我在Django模板中有一个条件,如果表达式的计算结果为true,则会创建一定颜色的文本,如果不是,则创建另一种颜色。请注意,我实际上不会像在此示例中那样在HTML中使用我的样式,但这样可以更容易地举例说明。这是代码:
<div class="span6 resultsBox">
<h2>Items:
{% if user.items >= user.itemsQuota %}
<span id="items" style="color:green">{{ user.items}} </span>
{% else %}
<span id="items" style="color:white">{{ user.items }} </span>
{% endif %}
/ {{user.itemsQuota }}.
</h2><br />
</div>
无论我做什么,生成的span
文字都是绿色的!通常情况下,我认为我的模型存在问题以及它们如何计算平等,但即使输出类似100/1000
,显然{{ user.items }}
小于{{}} {1}},绿色字体出现!我的条件错过了什么?
答案 0 :(得分:3)
我的猜测是user.items
是一个字符串而user.itemsQuota
是一个数字。在Python(3.x之前)中,'100' > 1000
为True。
快速演示:
from django.template import Template, Context
from django.conf import settings
settings.configure()
t = Template('{% if a > b %} a > b {% else %} a <= b {% endif %}')
print t.render(Context({ 'a' : '100', 'b' : 1000 }))
print t.render(Context({ 'a' : 100 , 'b' : 1000 }))
打印:
a > b
a <= b
如果您需要仅限模板的解决方案,则可以:
t = Template('{% if a|add:"0" > b|add:"0" %} a > b {% else %} a <= b {% endif %}')
(因为add
将值强制转换为整数)