如果模板中的评估中断

时间:2013-03-26 13:38:30

标签: python django

我在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}},绿色字体出现!我的条件错过了什么?

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将值强制转换为整数)