最近发现之前写一个程序存在一个问题,和大家分享下:
需求:
将视图中的数据根据如下条件在网页上显示不同的颜色:
[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]之间的数据不能正常的判断而其它区间的数据没有问题的原因还不是很清楚。