如何在 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模板中添加,乘以数字变量?

当键具有特殊字符时,如何进行 Django 模板字典查找? [复制]

Django - 模板中的复杂计算

Django 模板中的错误:我可以在 if 语句中进行算术运算吗

Django:如何在模板中使用设置? [复制]

MSVC 无法根据模板参数进行数学运算,这是一个错误吗?