django中template编写常见坑

本文探讨了在Django的MTV模式下,Template中进行数值操作时遇到的常见问题,包括加法、减法、乘法、使用widthratio进行除法以及数据保留小数位等。同时,文章提到了在进行除法运算时如何避免丢失小数点后的值,以及在处理空值时`default`和`default_if_none`的选择建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

django典型的MTV模式,最近碰上一些在template上有关数值的问题,相比于之前java中用的jsp,thymleaf模板可能有些许不同,有时方便一些;


  • Django模版加法:
{{ value|add:10}} value=5,则返回15 
  • Django模版减法:
{{value|add:-10}} value=5,则返回-5,这个比较好理解,减法就是加一个负数 
  • Django模版乘法:
{%  widthratio 5 1 100 %} 上面的代码表示:5/1 *100,返回500,widthratio需要三个参数,
它会使用 参数1/参数2*参数3,所以要进行乘法的话,就将参数2=1即可 
  • Django做除法,这里用到widthratio这个方法
 <td>{% widthratio foo.product_amount 100 1 %}</td>#}

 如果想将widthratio函数处理后的值当做变量,可以如下方法
 {% widthratio this_value max_value max_width as width %}
{% blocktrans %}The width is: {{ width }}{% endblocktrans %}
  • 数据保留两位小数
  <td>{{ foo.product_amount |floatformat:5 }}</td>
  register = template.Library()
  • 一些复杂一些的运算
利用 add 这个filter ,可以做更疯狂的事:
计算 A^2: {% widthratio A 1 A %}
计算 (A+B)^2: {% widthratio A|add:B 1 A|add:B %}
计算 (A+B) * (C+D): {% widthratio A|add:B 1 C|add:D %}
  • 除法并保留小数
首先定义方法在templatehelper.py文件中
@register.filter
def div(value, div):
    '''
    分转化为元,保留两位小数
    :param value:
    :param div:
    :return:
    '''
    return round((value / div), 2)
然后在模板中可以按照如下使用,当然前提是{% load templatehelper %}:
<td>{{ foo.product_amount |div:100 }}</td>

尝试过一个笨办法,但是不生效,而且就算生效,也会出现忽略掉小数点后面得值的情况,所以不建议:

<td>{% widthratio foo.product_amount 100 1 as width %}
{% blocktrans %}{{ width }}{% endblocktrans %}</td>#}
  • 如果没有的值 ,设置默认|default:”“与|default_if_none:”” 谁更适合你?
 0会被替换成“”:<td>{{ foo.remark |default:""}}</td>

只有None才会被替换:  <td>{{ foo.remark |default_if_none:""}}</td>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值