首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >[Odoo][Qweb]字典前端,打印键和值

[Odoo][Qweb]字典前端,打印键和值
EN

Stack Overflow用户
提问于 2015-12-06 20:39:16
回答 4查看 17.3K关注 0票数 4

有没有办法在循环Qweb中从python字典中打印键和值?例如,如果我有一个返回字典的函数:

代码语言:javascript
复制
def get_informations(self):
    mydico={'myfirstkey':1,'mysecondkey':2}
    return mydico

然后,在Qweb报告中:

代码语言:javascript
复制
<t t-foreach="doc.get_informations()" t-as="l">
    <tr>
       <td class="text-right">
         <t t-esc="l"/>
       </td>
       <td class="text-right">
         <span t-esc="l_value"/>
       </td>
    </tr>
</t>

如何打印

谢谢

更新07/12/15:

谢谢你的回程。没错,当我把

代码语言:javascript
复制
 <t t-foreach="{'my': 'first', 'my2': 'second' }" t-as="v">

起作用了,我有这样的东西:

代码语言:javascript
复制
my    first
my2   second

但是,当我在foreach中使用一个函数时,具有完全相同的输出,qweb不能将它分开,我有:

代码语言:javascript
复制
{'my': 'first', 'my2': 'second' }
{'my': 'first', 'my2': 'second' }

所以我决定换个办法:

在“继承报表”中

代码语言:javascript
复制
<t t-foreach="doc.tabTaxes" t-as="v">
    <tr>
        <td>
            <span t-esc="v.name"/>
        </td>
        <td>
            <span t-esc="doc.get_amount(v.name)[0]"/>
        </td>
    </tr>
</t>

sale.order中,模型继承:

代码语言:javascript
复制
@api.one
def get_amount(self, taxeNom):
    total=0
    for ligne in self.order_line:
        for taxe in ligne.tax_id:
            if (taxeNom == taxe.name):
                try: total += ligne.price_reduce * (taxe.amount/100.)
                except: total +=0
    return "{0:.2f}".format(total)
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-02-26 15:19:26

最后,我理解了如何使用V9:

代码语言:javascript
复制
<tr t-foreach="o.get_list_taxe(o.id)[0]" t-as="taxe">
  <t t-set="name" t-value="taxe['name']"/>
  <t t-set="total" t-value="taxe['total']"/>
  <td>
    <strong>
      <p>
        <t t-esc="name"/>
      </p>
    </strong>
  </td>
  <td class="text-right">
    <t t-esc="total" t-esc-options='{"widget": "monetary", "display_currency": "res_company.currency_id"}'/>
  </td>
</tr>
票数 7
EN

Stack Overflow用户

发布于 2015-12-07 00:53:58

@FTK

考虑到您的函数正在将有效的字典返回到qWeb模板,下面的代码将完成以下工作:

代码语言:javascript
复制
    <div id="wrap" class="oe_structure">
        <t t-foreach="{'my': 'first', 'my2': 'second' }" t-as="v">
         *<t t-esc="v"/> : <t t-esc="v_value"/></t>
    </div> 

您可以将tr放在循环中,以便按照您的预期创建表行,下面的代码将这样做:

代码语言:javascript
复制
    <div id="wrap" class="oe_structure">
        <table class="table table-bordered table-condensed">
            <t t-foreach="doc.get_informations()" t-as="item">
                <tr>
                    <td class="text-right">
                        <t t-esc="item"/>
                    </td>
                    <td class="text-right">
                        <t t-esc="item_value"/>
                    </td>
                </tr>
            </t>
        </table>
    </div>

您当然不需要按需要分配它们。希望这能帮到你,

击败,

票数 11
EN

Stack Overflow用户

发布于 2015-12-07 13:04:08

  • $as_all

正在迭代的对象

  • $as_value

当前的迭代值,与列表和整数的$as相同,但对于映射,它提供了值(其中$as提供键)

  • 警告

$as将被传递给t-as的名称所取代。

此链接的参考:https://www.odoo.com/documentation/8.0/reference/qweb.html

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34122439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档