如何在Odoo中继承没有ID的模板?

时间:2015-01-12 17:54:06

标签: templates odoo

我正在尝试显示在任务中进行更改的日期。为此,我需要继承小部件的模板" mail_thread"。该模板在其定义中没有id。就是这样:

<?xml version="1.0" encoding="UTF-8"?>
<template>

    <!--
        mail.Widget template used to namespace the css -->
    <t t-name="mail.Root">
        <div class="oe_mail">
        </div>
    </t>

...


                    <span t-att-title="widget.date">
                        <t t-if="widget.timerelative" t-esc="widget.timerelative"/>
                        <t t-if="!widget.timerelative" t-raw="widget.display_date"/>
                    </span>



...

</template>

在我的模块中,我需要替换<span>标记才能显示日期。

那么,如何继承该模板并替换标签?

2 个答案:

答案 0 :(得分:11)

客户端模板有不同的继承机制(Web模板,在<templates>标签内定义,“在加载时在客户端使用javascript编译”)和服务器端模板(通常是视图,必须包含在内)在__openerp__.py文件的数据列表中,“启动/升级odoo服务器时编译”。

您可以使用<t t-extend="template_name">后跟一个或多个来扩展Web /窗口小部件模板模板 <t t-jquery="jquery_selector" t-operation="operation">有点像xpath,但客户端更强大 您不需要ID,继承是基于模板名称的。 (t-name指令)

  

模板继承用于就地更改现有模板,   例如将信息添加到其他模块创建的模板中。

     

模板继承是通过t-extend指令执行的   将模板的名称作为参数进行更改。

     

然后使用任意数量的t-jquery执行更改   子指令:

     

<t t-extend="base.template"> <t t-jquery="ul" t-operation="append"> <li>new element</li> </t> </t>

     

t-jquery指令采用CSS选择器。使用此选择器   扩展模板,用于选择指定的上下文节点   应用了t操作:

     
      
  • 追加
      节点的主体附加在上下文节点的末尾(在上下文节点的最后一个子节点之后)
  •   
  • 前置
      节点的主体被预先添加到上下文节点(在上下文节点的第一个子节点之前插入)
  •   
  •   节点的主体正好插入上下文节点
  • 之前   

  •   节点的主体紧跟在上下文节点
  • 之后插入   

  •   节点的主体替换上下文节点的子节点
  •   
  • 替换
      节点的主体用于替换上下文节点itsel
  •   
  • 无操作
      如果未指定t-operation,则模板主体将被解释为javascript代码,并以上下文节点执行,如此
  •   

答案 1 :(得分:0)

我还想更改此xml文件中的日期显示格式。所以我将这个默认布局的整个模板复制到我的新模块中,并且只更改了span标记中的日期。

<?xml version="1.0" encoding="UTF-8"?>
<template>

    <!-- default layout -->
    <t t-name="mail.thread.message">
    ....

        <span t-att-title="widget.date">
            <!--<t t-if="widget.timerelative" t-esc="widget.timerelative"/>-->
            <!--<t t-if="!widget.timerelative" t-raw="widget.display_date"/>-->
            <t t-raw="widget.display_date"/>
        </span>

    ....
    </t>
</template>

需要在 __ openerp __。py

中声明此xml文件

它对我有用。