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

时间: 2024-10-07 19:02:08

Django 模板中使用if标签进行数据比较问题的相关文章

Django 模板中 变量 过滤器 标签 的使用方法

一.变量 1.变量的形式是:{{variable}}, 当模板引擎碰到变量的时候,引擎使用变量的值代替变量.    2.使用dot(.)能够访问变量的属性    3.当模板引擎碰到dot的时候,查找的顺序是什么样子呢?        a.字典查找,例如:foo["var1"]        b.属性查找,例如:foo.bar        c.方法查找,例如:foo.bar()        d.list-index查找,例如foo[bar] 注意:方法查找比一般的查找要复杂一些 (1

Django模板中include的标签的使用

在很多网站中,基本上的都会有一个开头和一个结尾,在每一个网页中都会显示.相对于这种的来说,在Django中,最好的方法就是使用include的标签,在每一个模板中都加入这个开头和结尾的标签. 官方文档:链接 1.可以直接使用模板的名字进行导入,例如 {% include "index.html"%} 2.可以使用模板的路径进行导入,例如,要导入templates目录的子目录aaa中的html文件,如图: 使用{% include "aaa/include.html"

在 Django 模板中遍历复杂数据结构的关键是句点字符

在 Django 模板中遍历复杂数据结构的关键是句点字符 ( . ). 实例二 mysit/templates/myhtml2.html修改如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {{ time.year }}

django模板中使用加法,以及变量赋值

加法 django中自带过滤add {{ num|add:'12' }} 这样就表示num加12,有了加就有减法了~~~ 还可以{{ num|add:total }}还可以与其他属性相加 变量赋值 {% with distance=5 %} {# 自定义的属性只在with标签内可用 #} {% endwith %} django模板中使用加法,以及变量赋值

Django 模板中引用静态资源(js,css等)

Django 模板中免不了要用到一些js和CSS文件,查了很多网页,被弄得略晕乎,还是官网靠谱,给个链接大家可以自己看英文的. https://docs.djangoproject.com/en/1.6/howto/static-files/ 大致步骤是这样的: 1.确保setting.py里的installed_apps中包括了django.contrib.staticfiles,没有的话大家给添上就行. 2.同样是在setting.py里面进行添加,我们需要添加静态资源相关的配置.可以这么写

django 模板中定义临时列表

<ul class="num_t clr"> {% for obj in ""|ljust:"10" %} <li>{{ forloop.counter }}</li> {% endfor %} </ul> 官网是这样使用: ljust Left-aligns the value in a field of a given width. Argument: field size For exampl

django模板中的extends和include使用方法

一.extends使用方法 首先extends也就是继承,子类继承父类的一些特性.在django模板中通过继承可以减少重复代码. 首先我们建立一个app,名字叫做hello.别忘了在settings.py中的INSTALLED_APPS注册这个app.不注册会出现hello目录下的templates中的模板无法调用. 1.在根目录下的templates创建base.html <!DOCTYPE html> <html lang="en"> <head>

Django模板系统(非常详细)(后台数据如何展示在前台)

前面的章节我们看到如何在视图中返回HTML,但是HTML是硬编码在Python代码中的这会导致几个问题:1,显然,任何页面的改动会牵扯到Python代码的改动网站的设计改动会比Python代码改动更频繁,所以如果我们将两者分离开会更方便2,其次,写后台Python代码与设计HTML是不同的工作,更专业的Web开发应该将两者分开页面设计者和HTML/CSS程序员不应该编辑Python代码,他们应该与HTML打交道3,程序员写Python代码同时页面设计者写HTML模板会更高效,而不是一个人等待另一

Django模板之自定义过滤器/标签/组件

自定义步骤: 1.     在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag. 2.     在app应用中创建templatetags模块包(模块名只能是templatetags) 3.     创建任意 .py 文件,如:my_tags.py ·   导入模块:from django import template ·   实例化注册器:register = template.Library()   #register的名