[英]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.