zoukankan      html  css  js  c++  java
  • Django 模板中使用if标签进行数据比较问题

        最近发现之前写一个程序存在一个问题,和大家分享下:

    需求:

    将视图中的数据根据如下条件在网页上显示不同的颜色:

    [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]之间的数据不能正常的判断而其它区间的数据没有问题的原因还不是很清楚。

  • 相关阅读:
    Golang之redis
    Golang之Socket
    Golang之单元测试
    Golang之定时器,recover
    Python深度学习之安装theano(windows)
    电容充放电时间常数RC计算方法(转载)
    输入阻抗的理解(转载)
    浮点数的二进制表示
    modbus-poll和modbus-slave工具的学习使用——modbus协议功能码04的解析——04读输入寄存器
    STM32调试中遇到的工具困难(转载+整理)
  • 原文地址:https://www.cnblogs.com/junyiningyuan/p/4402261.html
Copyright © 2011-2022 走看看