Jinja2 - 对象在 for 循环中表现不同

Jinja2 - Object behaving differently inside for loop

我有一个对象(一个名为 tortoise-orm 的 ORM 的 QuerySet 结果,但我认为这无关紧要)如果我用 Jinja2 的 for 循环迭代它,它的行为会有所不同。

将对象 tasks 视为可迭代对象。

例如,这工作正常,它输出负责的每个任务的名称,这是我当前使用的修复:

{% for i in range(tasks|length) %}
    {% set task = tasks[i] %}
    <li>{{task.responsible.name}}</li>
{% endfor %}

但这只会创建一堆空白 <li>,没有任何错误:

{% for task in tasks %}
    <li>{{task.responsible.name}}</li>
{% endfor %}

这也很好用:

<h1>{{tasks[0].responsible.name}}</h1>

所以,在敲了半天脑袋之后,我认为这可能与 Jinja 如何访问可迭代对象以及这个特定对象如何实现自己的可迭代对象有关,但是由于我不愿意修改任何一个库,所以我我只是在寻找解决方案,也许是关于如何避免未来出现此类问题的简单解释

这里可能发生了什么?

如果您处理的对象是生成器(而不是列表),一旦您通过 tasks|length 使用了它,就可以了。你不能重新开始。如果您确实需要它的大小,请将生成器转换为处理程序中的列表(例如,通过传递 list(tasks) 而不是 tasks.