繁体   English   中英

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

这里会发生什么?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM