【问题标题】:How to do math operations in django template? [duplicate]如何在 django 模板中进行数学运算? [复制]
【发布时间】:2019-07-16 15:08:52
【问题描述】:

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

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

但这会导致TemplateSyntaxError。那个操作怎么做?

【问题讨论】:

    标签: django templates


    【解决方案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 %}
    

    【讨论】:

      猜你喜欢
      • 2011-09-11
      • 2020-10-28
      • 1970-01-01
      • 2018-02-21
      • 2021-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多