2011-06-08 154 views
78

我想这样做:如何在Django模板中进行数学运算?

100 - {{object.article.rating_score}} 

因此,例如,输出将是 “20”,如果{{object.article.rating_score}}等于 “80”。如何在模板级别执行此操作?我没有权限访问python代码。

回答

114

可以使用add过滤器:

{{ object.article.rating_score|add:"-100" }} 
+25

对于乘法和除法,您可以误用内置的'widthratio'模板标记。要计算a * b使用'{%widthratio a 1 b%}',对于a/b使用'{%widthratio a b 1%}'。只有缺点,结果在返回之前被四舍五入为整数。 [使用Django的widthratio模板标签进行乘法和除法](http://slacy.com/blog/2010/07/using-djangos-widthratio-template-tag-for-multiplication-division/) – michaell 2012-08-03 08:07:18

+7

使用django-mathfilters。 http://pypi.python.org/pypi/django-mathfilters – Erik 2013-02-12 19:15:16

+2

@Erik应该是自己的答案 - 更好的解决方案。 – nhinkle 2014-01-28 19:42:47

12

通常建议您在您的视图中进行此计算。否则,您可以使用添加过滤器。

+1

不允许是不正确的,但是,在大多数情况下推荐使用模板逻辑来分离查看逻辑。 [Django设计哲学](https://docs.djangoproject.com/en/dev/misc/design-philosophies/?from=olddocs#separate-logic-from-presentation) – 2011-06-08 21:21:24

+0

你是如何在模板内循环的? – bismigalis 2013-11-25 15:00:53

24

使用django-mathfilters。除了内置的加法滤波器之外,它还提供滤波器来减去,乘,除,并取绝对值。

对于上面的具体示例,您可以使用{{ 100|sub:object.article.rating_score }}