【问题标题】:How can i access a jinja2 variable outside the for loop?如何在 for 循环之外访问 jinja2 变量?
【发布时间】:2017-12-08 13:41:31
【问题描述】:

我正在尝试使用 for 循环来为每天添加一些数字 我想访问for循环之外的变量我不知道该怎么做在烧瓶里?

这里有一些简单的代码

{% set newtotal = 0 %}
{% for item in daily: %}
    {% set newtotal = newtotal + item[10]|float %}
{% endfor %}

<div class="bottom">
    <span>Total: {{ newtotal }}</span>
</div>

item[10] 收集的数字是美元值 如果我将 {{ newtotal }} 放在 endfor 之前,它会显示每个值,因为它被加起来,这不是我想要的

编辑: 如果它每天都有帮助,是 8 个元组的列表

【问题讨论】:

  • 您能否传入一个名为“newtotal”的变量,该变量等于len(daily)(您将在 Python 服务器脚本中计算)?
  • 这基本上就是我最终为提示所做的事情;)

标签: python python-3.x flask jinja2


【解决方案1】:

一种解决方案(可能是“最简单的”)是更改您的 Python 脚本以传入一个名为 newtotal 的变量,该变量就是daily 列表的长度!

或者,您可以使用length filter

{{things|length}}

在这种情况下,您的代码可能如下所示:

{% set newtotal = 0 %}
{% for item in daily: %}
    {% set newtotal = newtotal + item[10]|float %}
{% endfor %}

<div class="bottom">
    <span>Total: {{daily|length}}</span>
</div>

希望对你有帮助!

其他来源:

jinja2: get lengths of list

How do I access Jinja2 for loop variables outside the loop?

编辑

对不起,我看错了问题!

您可以改用sum filter ({{ list | sum() }})。

所以你的代码可能看起来像:

{% set newtotal = 0 %}
{% for item in daily: %}
    {% set newtotal = newtotal + item[10]|float %}
{% endfor %}

<div class="bottom">
    <span>Total: {{ daily | sum() }}</span>
</div>

新来源:

Documentation Sum elements of the list in Jinja 2

【讨论】:

  • 当我这样做时它只返回列表的长度而不是位置 10 中的项目的总和
  • 我编辑了答案,希望它有效,它似乎对其他人有用!
【解决方案2】:

请记住,不能在块或循环内设置变量并让它们显示在其外部。 从 2.10 版开始,这可以使用允许跨范围传播更改的命名空间对象来处理。

这是您使用命名空间的代码:

{% set ns = namespace (newtotal = 0) %}
{% for item in daily: %}
    {% set ns.newtotal = ns.newtotal + item[10]|float %}

{% endfor %}

<div class="bottom">
    <span>Total: {{ ns.newtotal }}</span>
</div>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-22
    • 1970-01-01
    相关资源
    最近更新 更多