最近發現之前寫一個程序存在一個問題,和大家分享下:
需求:
將視圖中的數據根據如下條件在網頁上顯示不同的顏色:
[30,60] 藍色
[0,30) 紅色
(60,100] 綠色
之前的程序片段:
{% if x.y.5day_ago|floatformat:2 > 60|floatformat:2 %}
<td style="color :green"><strong> {{x.y.5day_ago}}%</strong></td>
{% else %}
{% if x.y.5day_ago|floatformat:2 < 30|floatformat:2 %}
<td style="color :red"><strong>{{x.y.5day_ago}}%</strong></td>
{% else %}
<td style="color :blue">{{x.y.5day_ago}}%</td>
{% endif %}
{% endif %}
可以基本實現對不同范圍的數據顯示不同的顏色。
但后面發現,對於[0,10]之間的數據,分成了三段,出現了紅、藍、綠三種不同的顏色,按照上面的條件,10以內的數字均在<30的范圍內,應都顯示為紅色。百思不得其解。
為了解決這個問題,自定義了另外一個類似的字典,對應的值為數字類型的,使用這個條件可以正常顯示。
最后將x.y.5day_ago類似的值的類型打印出來,才發現上'str'類型。故創建了過濾器num.py,將字符串轉換為浮點型數據
from django import template register = template.Library() @register.filter(name='numgo') def numgo(value): return (float(value))
模板中代碼改為:
{% if x.y.5day_ago|numgo > 60|numgo or x.y.5day_ago|numgo = 100|numgo %}
<td style="color :green"><strong> {{x.y.5day_ago}}%</strong></td>
{% else %}
{% if x.y.5day_ago|numgo < 30|numgo %}
<td style="color :red"><strong>{{x.y.5day_ago}}%</strong></td>
{% else %}
<td style="color :blue">{{x.y.5day_ago}}%</td>
{% endif %}
{% endif %}
改成這樣就不會出現上面的問題了,但為什么之前的[0,10]之間的數據不能正常的判斷而其它區間的數據沒有問題的原因還不是很清楚。
