如何在Django模板中进行数学运算?

时间:2019-02-22 13:47:21

标签: django templates

我想从Django模板中同一对象的另一个变量中减去一个变量

{% for object in object_list %}
      {{ object.var1 - object.var2 }}
{% endfor %}

但这会导致TemplateSyntaxError。该怎么做?

2 个答案:

答案 0 :(得分:1)

(类似的问题here。)

完成此操作的好方法似乎是使用django-mathfilters。除了减法(加,乘,除,绝对值等)之外,这还使您可以执行其他数学运算。

对于您的问题,这应该可行: {{ object.var1|sub:object.var2 }}

如果您知道只需要减法,就可以找到一个更简单的解决方案(尽管我不认为这值得担心)。

答案 1 :(得分:1)

建议使用django视图或模型进行这种数学运算。因为django模板用作演示文稿,并且不应具有任何业务逻辑或计算。您只需在queryset中使用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 %}