Odoo 12 报告样本

Odoo 12 report sample

我正在尝试进行报告,但没有使用 external_layoutinternal_layout,因为它们中有 header。我想拥有自己的 header 和页脚。

我尝试过使用 minimal_layout,因为与其他布局相比,它似乎不那么繁忙。

但我一直出错body_parent = root.xpath('//main')[0] IndexError: list index out of range - - -

这是我的代码

<template id="applicant_contract_css">
    <t t-call="web._assets_helpers"/>
    <link rel="stylesheet" type="text/scss" href="/fhid_recruitment/static/src/css/applicant-contract.css"/>
</template>

<template id="minimal_layout" inherit_id="web.minimal_layout">
    <xpath expr="//head" position="inside">
        <t t-call-assets="fhid_recruitment.applicant_contract_css"/>
    </xpath>
</template>

<template id="applicant_contract_offering">
    <t t-call="web.minimal_layout">
        <t t-foreach="docs" t-as="o">
            <div class="header">
                My Header
            </div>
            <div class="article">
                Content
            </div>
            <div class="footer">
                My footer
            </div>
        </t>
    </t>
</template>

如何使用 minimal layout?或者我应该使用其他布局吗?

您可以继承 external_layoutinternal_layout 并使用您的自定义代码覆盖默认行为。并在您的报告中使用它。

当您想要创建模板报告时,您至少需要调用 "web.html_container" 调用 "web.report_layout" 定义 Minal Report layout

报告模板的所有 css 文件应添加到 report_assets_common 模板:

<template id="assets_common" name="a proper name for your template purpuse" inherit_id="web.report_assets_common">
    <xpath expr="." position="inside">
        <link rel="stylesheet" type="text/scss" href="/fhid_recruitment/static/src/css/applicant-contract.css"/>
    </xpath>
</template>

最好将页眉和页脚提取到模板中,以便在多个报告中使用它们,例如 external_layout,您可以查看 external_layout_standard 以获得基本想法。

<template id="external_layout">
    <div class="header">
        My Header
    </div>
    <!-- everything inside t-call="fhid_recruitment.external_layout" will be rendered here -->
    <t t-raw="0" />

    <div class="footer">
        My footer
    </div>
</template>

在模板中,只需在此处调用您的自定义外部布局:

<template id="applicant_contract_offering">
    <t t-call="web.html_container">
        <!-- because it's defined in this module "fhid_recruitment" -->
        <t t-call="fhid_recruitment.external_layout">
           <t t-foreach="docs" t-as="o">
               <div call="page">
                    <div class="article">
                        Content
                    </div>
                </div>
            </t>
        </t>
    </t>
</template>

关于模板,您需要了解的最重要的事情之一是 <t t-raw="0" />,例如,如果模板 x_template 有这个,当我们这样称呼它时:

<t t-call="x_template">
    any_content
</t>

Qweb 引擎将做的是,在呈现报告时将 x_template 中的 <t t-raw="0" /> 替换为 any_content

如果您打算只为一个模板使用页眉和页脚,为了简化事情:

<template id="applicant_contract_offering">
    <t t-call="web.html_container">
        <t t-foreach="docs" t-as="o">
            <div class="header">
                My Header
            </div>
            <div class="article">
                Content
            </div>
            <div class="footer">
                My footer
            </div>
        </t>
    </t>
</template>