【问题标题】:doing something with a variable inside a block tag用块标签内的变量做某事
【发布时间】:2012-05-23 05:47:04
【问题描述】:

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

在我看来.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 循环,这使得它非常低效!

//鼠标。

【问题讨论】:

    标签: django django-templates


    【解决方案1】:

    你可以有嵌套标签:

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

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

    {{ player.score|add:subtotal }}
    

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

    请参阅 this answer 以了解如何开始,但请注意他们正在讨论对列表求和。

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

    【讨论】:

      【解决方案2】:

      我真的建议您保持逻辑和信息显示的分离。 Django 模板系统经过专门设计,旨在通过使用逻辑和计算来混淆模板,从而最大程度地减少您对自己的打击。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-04-12
        • 2016-07-03
        • 1970-01-01
        • 1970-01-01
        • 2022-07-23
        • 1970-01-01
        • 2015-04-18
        相关资源
        最近更新 更多