0

我有一个对象(一个名为 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如何访问iterables以及这个特定对象如何实现自己的iterable有关,但是由于我不愿意修改任何一个库,我只是在寻找一个解决方案,也许是一个关于如何避免未来此类问题的简单解释

这里会发生什么?

4

1 回答 1

1

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

于 2019-08-09T17:33:04.517 回答