Jinja2-对象在for循环中的行为不同

时间:2019-08-09 16:37:02

标签: python html flask jinja2 quart

如果使用Jinja2的for循环对其进行迭代,我有一个对象(行为由ORM的QuerySet结果称为tortoise-orm,但我认为这没有关系)。

将对象text/plain视为可迭代对象。

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

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 %}

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

这里会发生什么?

1 个答案:

答案 0 :(得分:1)

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