【发布时间】:2019-07-16 15:08:52
【问题描述】:
我想从 django 模板中同一对象的另一个变量中减去一个变量
{% for object in object_list %}
{{ object.var1 - object.var2 }}
{% endfor %}
但这会导致TemplateSyntaxError。那个操作怎么做?
【问题讨论】:
我想从 django 模板中同一对象的另一个变量中减去一个变量
{% for object in object_list %}
{{ object.var1 - object.var2 }}
{% endfor %}
但这会导致TemplateSyntaxError。那个操作怎么做?
【问题讨论】:
(类似问题here。)
实现这一点的好方法似乎是使用django-mathfilters。这使您能够执行除减法之外的其他数学运算(加法、乘法、除法、绝对值等)。
对于您的问题,这应该有效:
{{ object.var1|sub:object.var2 }}
如果你知道你永远只需要减法,你可能会找到一个更简单的解决方案(尽管我认为这不值得担心)。
【讨论】:
建议使用 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 %}
【讨论】: