我在Odoo(实习)中有点新,所以我想知道在Odoo(qweb)中是否存在包含(php)的等价物?
否则,我们如何在另一个中包含xml文件?
例如,我得到了我的主要xml文件,我想将不同的页面或部分页面(通过id或类)调用到我的主页面,是否可以,我们该怎么做?
我已经尝试过xiinclude但似乎它在那里不起作用...... 我已经看过了,但即使使用odoo文档我也无法理解它是如何工作的。
我正在研究Odoo 10。
亲切,
答案 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>