如何在 django 模板中进行数学运算? [复制]
Posted
技术标签:
【中文标题】如何在 django 模板中进行数学运算? [复制]【英文标题】:How to do math operations in django template? [duplicate] 【发布时间】:2019-07-16 15:08:52 【问题描述】:我想从 django 模板中同一对象的另一个变量中减去一个变量
% for object in object_list %
object.var1 - object.var2
% endfor %
但这会导致TemplateSyntaxError
。那个操作怎么做?
【问题讨论】:
【参考方案1】:(类似问题here。)
实现这一点的好方法似乎是使用django-mathfilters。这使您能够执行除减法之外的其他数学运算(加法、乘法、除法、绝对值等)。
对于您的问题,这应该有效:
object.var1|sub:object.var2
如果你知道你永远只需要减法,你可能会找到一个更简单的解决方案(尽管我认为这不值得担心)。
【讨论】:
或者您可以编写自己的模板标签并直接从模板中传递变量【参考方案2】:建议使用 django 视图或模型来进行这种数学运算。因为django模板是用来做展示的,不应该有任何业务逻辑或者计算。您可以在查询集中使用annotations 简单地进行计算。例如:
from django.db.models import F
object_list = ModelClass.objects.all().annotate(difference=F('var1') - F('var2'))
如果您使用的是Generic Display Views,则将此代码放入get_queryset
,如下所示:
class YourListView(ListView):
...
def get_queryset(self, *args, **kwargs):
qset = super(YourListView, self).get_queryset(*args, **kwargs)
return qset.annotate(difference=F('var1') - F('var2'))
然后像这样使用它的模板:
% for object in object_list %
obj.difference
% endfor %
【讨论】:
以上是关于如何在 django 模板中进行数学运算? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
当键具有特殊字符时,如何进行 Django 模板字典查找? [复制]