2013-03-26 68 views
0

我有一个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 }}小于{{ user.itemsQuota }},也会出现绿色字体!我在这里用我的条件是什么?

回答

3

我的猜测是user.items是一个字符串,user.itemsQuota是一个数字。在Python(3.x之前)中,'100' > 1000为真。

快速演示:

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

+0

'add'技巧奏效,但没有一个是字符串。 'itemsQuota'是一个整数变量,而items是'PositiveIntegerField'。我认为它会自动转换为模板语言中的整数,但我想我需要执行此“投射”。 – user1427661 2013-03-26 14:33:27