Jinja2 - 循环中的对象表现不同

2024-05-15 21:28:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个对象(一个来自ORM的QuerySet结果,称为tortoise ORM,但我认为这并不重要),如果我用Jinja2的for循环迭代它,它的行为会有所不同

将对象tasks视为iterable对象

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

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

这里会发生什么


Tags: 对象nameinjinja2fortaskormli
1条回答
网友
1楼 · 发布于 2024-05-15 21:28:21

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

相关问题 更多 >