如何在 Qweb 中制作具有特定循环次数的 "for-loop"?

How can I make a "for-loop" with a specific number of loops in Qweb?

我想制作一个循环以准确打印元素的次数。像这样:

<t t-for="o.label_qty" >
...
</t>

其中 o.label_qty 是一个整数。

但我只能在 qweb 中使用 t-foreach 循环:

<t t-foreach="o.pack_operation_ids" t-as="l" >
...
</t>

有办法吗?

如果不是,我认为唯一的解决方案是创建一个包含 o.label_qty 元素的虚拟列表并将其写入 foreach。

是的,在 Odoo Qweb 报告中完全有可能,您只需添加以下方法即可完成类似的操作

     <t t-foreach="o.pack_operation_ids" t-as="l" >
         <td class="col-xs-1">
             <span t-esc="l_index+1"/>
         </td>
     </t>

听说 <span> tag 正在打印我们正在打印我们的 qweb 报告时循环将被执行的总次数。 indexQweb Template Engine 的一部分所以听说它总是以 0 element.

开头

希望我的回答对您有所帮助:)

t-foreach 指令接受 Python 表达式。 因此,您可以像在 Python for 循环中一样使用 range()

<t t-foreach="range(o.label_qty)" t-as="l">
...
</t>

range() 函数将引发浮动值错误。

例如:

>>>a=1.0
>>>range(a)
>>>Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
   TypeError: range() integer end argument expected, got float.

对于动态变量循环,有两种可能的循环方式。

  1. 整数(由@Daniel Reis 回答)
  2. 浮点数(尝试以下)

    <t t-set="i" t-value="int(o.label_qty)"/>
    <t t-foreach="range(i)" t-as="l">
    ...
    </t>
    

for more details of range() function.