感觉很赞的一个设计,django的模板里面是用一个tags可以实现,加法,减法,乘法,除法的运算。嘿嘿

先看一下django 官方的解释

 For creating bar charts and such, this tag calculates the ratio of a given 
    value to a maximum value, and then applies that ratio to a constant. 
    For example:: 
        <img src='bar.gif' height='10' width='{% widthratio this_value max_value 100 %}' /> 
    Above, if ``this_value`` is 175 and ``max_value`` is 200, the image in 
    the above example will be 88 pixels wide (because 175/200 = .875; 
    .875 * 100 = 87.5 which is rounded up to 88).

这说明,widthratio 通常用来显示图表,比例时用的,一个数字占了多少百分比等。但仔细想想,如果将某些数字变成特定的数字,不就是乘除法运算了吗?请看:

乘法 A*B: {% widthratio A 1 B %}
除法 A/B: {% widthratio A B 1 %}

利用 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 %}

当然,这种方法在django中实现乘除法比较变态,看起来也不爽,更好的方法,是可以扩展自己的标签。在后面打算自己扩展一个计算乘法的标签,应该好很多。 

 

Django 的模板中的数学运算

前言

django模板只提供了加法的filter,没有提供专门的乘法和除法运算;
django提供了widthratio的tag用来计算比率,可以变相用于乘法和除法的计算。

加法

 {{value|add:10}}

note:value=5,则结果返回15

减法

{{value|add:-10}}

note:value=5,则结果返回-5,加一个负数就是减法了

乘法

{% widthratio 5 1 100%}

note:等同于:(5 / 1) * 100 ,结果返回500,withratio需要三个参数,它会使用参数1/参数2*参数3的方式进行运算,进行乘法运算,使「参数2」=1

除法  

{% widthratio 5 100 1%}

note:等同于:(5 / 100) * 1,则结果返回0.05,和乘法一样,使「参数3」= 1就是除法了。