如何包含在 Odoo 中?

How to include in Odoo?

我对 Odoo(internship) 有点陌生,所以我想知道在 Odoo(qweb) 中是否有等效项 include(php) ?

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

例如,我得到了我的主 xml 文件,我想将不同的页面或页面的一部分(通过 id 或 class)调用到我的主页面中,是否可能以及如何我们可以这样做吗?

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

我正在研究 Odoo 10。

亲切地,

等同于 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>