7

我想制作一个循环来打印元素的确切次数。像这样的东西:

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

其中o.label_qty是一个整数。

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

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

有没有办法做到这一点?

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

4

3 回答 3

10

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

<t t-foreach="range(o.label_qty)" t-as="l">
...
</t>
于 2015-07-17T22:01:16.500 回答
7

是的,在 Odoo Qweb Report 中完全有可能你只需要添加下面的方法来做这样的事情

     <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 报告时将执行循环的总次数。 index是的一部分,Qweb Template Engine所以听到它总是以0 element.

希望我的回答能帮到你:)

于 2015-07-17T13:40:45.703 回答
2

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>
    

有关 range() 函数的更多详细信息。

于 2017-03-30T08:51:04.213 回答