我想从Django模板中同一对象的另一个变量中减去一个变量
{% for object in object_list %}
{{ object.var1 - object.var2 }}
{% endfor %}
但这会导致TemplateSyntaxError
。该怎么做?
答案 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 %}