如何加入Odoo?

时间:2017-01-25 15:50:11

标签: templates include openerp qweb

我在Odoo(实习)中有点新,所以我想知道在Odoo(qweb)中是否存在包含(php)的等价物?

否则,我们如何在另一个中包含xml文件?

例如,我得到了我的主要xml文件,我想将不同的页面或部分页面(通过id或类)调用到我的主页面,是否可以,我们该怎么做?

我已经尝试过xiinclude但似乎它在那里不起作用...... 我已经看过了,但即使使用odoo文档我也无法理解它是如何工作的。

我正在研究Odoo 10。

亲切,

1 个答案:

答案 0 :(得分:2)

等效于t-call函数或指令。 t-call包含另一个模板文件。您可以使用它来包装通常使用website.layout模板的内容,如下例所示。

<openerp>
    <data>
        <template id="addon_name.template_name" name="Template Name">
            <t t-call="website.layout">
                <div>Hello World</div>
            </t>
        </template>
    </data>
</openerp>

但是,您不需要将其用作内容的包装。您可以使用该指令作为在现有模板中包含其他模板的方法。就像这样。

<openerp>
    <data>
        <template id="addon_name.template_name" name="Template Name">
            <t t-call="website.layout">
                <t t-call="addon_name.top_section"/>
                <t t-call="addon_name.middle_section"/>
                <t t-call="addon_name.bottom_section"/>
            </t>
        </template>
    </data>
</openerp>

为此,您必须已经定义了模板,在我的示例中,它们将是top_section,middle_section和bottom_section。还要观察这些模板如何不包含website.layout的包装器。当包含子模板时,您不希望包含website.layout模板,因为它旨在为网页提供整体结构,并且可以用作其余内容的包装器。

<openerp>
    <data>
        <template id="addon_name.top_section" name="Top Section">

                <div>Hello World</div>

        </template>
    </data>
</openerp>

如果您继承自另一个模板,则必须先告诉模板引擎您希望注入代码的位置。这是使用xpath表达式完成的。 Odoo源代码中有许多xpath表达式的例子。请在那里或在线查看。以下示例是对以下评论的回应,这些评论专门针对报告模板。创建报告模板时,您不希望包含website.layout模板。这是针对网站视图而非qweb报告。

<openerp>
    <data>
        <template id="addon_name.template_name" inherit_id="addon_name.template_name">
            <xpath expr="//div[@class='class_name']" position="replace">
                    <t t-call="addon_name.top_section"/>
                    <t t-call="addon_name.middle_section"/>
                    <t t-call="addon_name.bottom_section"/>
            </xpath>
        </template>
    </data>
</openerp>