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

  • 相关阅读:
    常用函数
    MySQL查询
    mysql的数据类型
    swoole简单demo测试
    linux下搭建lamp环境以及安装swoole扩展
    Linux下NAT模式和桥接模式的网络配置
    PhpStorm+xdebug+postman调试
    windows Apache 环境下配置支持HTTPS的SSL证书
    Yii2 restful api创建,认证授权以及速率控制
    Windows下开启composer镜像服务来安装yii
  • 原文地址:https://www.cnblogs.com/junyiningyuan/p/4402261.html
Copyright © 2011-2022 走看看