2013-03-26 88 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