如何在django模板中进行for循环计算

时间:2016-11-17 13:03:42

标签: python django

我必须在for循环中的django模板中做一些计算,但是它没有解析for循环中的python代码并给出错误

{% for ticket in tickets_in_cart %}
    <div class="davis-date-time">
        <h3>{{ ticket.performance_id__event_start_date|date:"M d" }}</h3>
        <p>{{ ticket.performance_id__timing }}</p>
    </div>
    <div class="davis-date-time">
      <h3>{{ ticket.performance_id__city }}</h3>
      <p>{{ ticket.performance_id__venue }}</p>
    </div>
    {% singleAmount = ticket.tickets_count*ticket.tickets_amount %}
    {% finalAmount += singleAmount %}

{% endfor %}

我必须这样做,因为我需要在for循环之外打印这个finalAmount变量值。

1 个答案:

答案 0 :(得分:2)

当然它不是&#34;解析python代码&#34; - 它是一种特定的模板语言,而不是Python。并且模板不是进行计算的地方,您应该在模型或视图中进行所有计算并将结果传递给模板。

在这种情况下,最简单的解决方案是:

1 /让ticket对象计算它自己的总金额(nb:我认为它是一个Model类):

class Ticket(models.Model):
    # fields here

    @property
    def total(self):
        return self.tickets_count * self.tickets_amount

2 /然后有一个简单的&#34;购物车&#34;包含票证列表并知道如何计算总票数的对象:

class Cart(object):
    def __init__(self, tickets):
        self.tickets = tickets

    @property
    def total(self):
        return sum(ticket.total for ticket in self.tickets)

现在你只需要使用它的列表(或查询集fwiw)来实现Cart并将其传递给你的模板 - 而不是模板代码中的单个计算,只是演示,问题解决。