0

假设我正在使用..在模板内传递一个变量“小计”

在我看来.py

subtotal = 0
page_vars = Context({
    'players': players,
    'subtotal': subtotal,
})

在我的 html 中。

{% for player in players %}
{% subtotal += player.score %}

{{ player.name }} <td />
{{ player.score }} <td />

{% endfor %}
{{ subtotal }}

它给了我

无效的块标签:'subtotal',预期为'empty'或'endfor'

我们不能在 django 模板系统中嵌套块标签吗?

如果是,如何?

必须有,至于我计算小计,我必须计算我的小计,我必须在两个地方运行相同的 for 循环,这使得它非常低效!

//老鼠。

4

2 回答 2

1

您可以有嵌套标签:

{% for foo in bar %}
   {% for zoo in foo %}
   {% endfor %}
{% endfor %}

要添加一些东西,您需要add模板过滤器。

{{ player.score|add:subtotal }}

但是,您的问题需要在视图中解决。因为即使使用自定义标签,您也无法可靠地跟踪模板中单个变量的运行总数。

请参阅此答案以获取帮助您入门的实现,但请注意,他们正在谈论对列表求和。

这种逻辑应该在视图中完成。

于 2012-05-15T17:02:55.393 回答
0

我真的建议您保持逻辑和信息显示的分离。Django 模板系统是专门设计的,目的是通过使用逻辑和计算来混淆模板,从而最大限度地减少你在脚下开枪的能力。

在视图中执行您的计算和逻辑操作,并将成品传递给模板。模板语言通过尝试强制执行这种责任分离来帮助您维护代码的可重用性和“可调试性”。

于 2012-05-15T19:11:13.240 回答