使用 QWeb 模板在 Odoo 中进行原子设计

Atomic Design in Odoo with QWeb templates

我正在 odoo 11.0 中设计一个网站,我想为一些将在多个视图中使用的元素创建一个文件,例如日历,我需要创建一个包含所有 html 元素的日历,然后在我需要显示日历的每个视图中简单地导入包含它的文件,即应用原子设计,但我搜索并找不到它。

要为您需要在其他时间重用的每个元素创建一个文件,您必须创建一个带有 <odoo>, <data><template> 标签的文件,就好像它是一个普通视图一样,然后要导入它,您可以使用 <t t-call = "module.template_id"> </ t>,例如,在我的例子中,我需要创建一个包含所有 html 元素的日历,然后将其导入其他视图,为此:

  1. 我使用以下代码在 my_module/views/share 文件夹中创建 calendar.xml 文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <odoo>
    <data>
    <template id="calendar">
    
        <!--HTML code-->
    
    </template>
    </data>
    </odoo>
    
  2. 我把这个文件导入模块__manifest__.py文件

  3. 在另一个视图中导入它使用t-call,假设我的模块被称为my_module,导入它我们写:

    <odoo>
    <data>
    <template id="index_template">
        <t t-call="website.layout">
            <div id="wrap">
                <div class="container">
    
                    <!--=============importing calendar============-->
                    <t t-call="my_module.calendar">
                    </t>
    
                   <!--=============other HTML code============-->
    
                </div>
            </div>
        </t>
    </template>        
    </data>
    </odoo>
    

例如,如果我正在导入的视图显示动态数据,我需要显示如下海报:选择日期:'event_type' 其中可能的值有:event、party、reservation等。并且它会在显示日历时获取值,在日历文件中我们使用一个变量,该变量将从导入它的视图中设置,calendar.xml文件看起来像这样:

    <?xml version="1.0" encoding="UTF-8"?>
    <odoo>
    <data>
    <template id="calendar">
        <h1>Choose the date for the <t t-esc="event_type"/></h1>
        <!--HTML code-->

    </template>
    </data>
    </odoo>

在导入日历的文件中,我必须设置变量“event_type”的值,在这种情况下,将显示:'Choose the date for the party',文件看起来像这样:

    <odoo>
    <data>
    <template id="index_template">
        <t t-call="website.layout">
            <div id="wrap">
                <div class="container">

                    <!--=============importing calendar============-->
                    <t t-call="my_module.calendar"> 
                       <t t-set="event_type">party</t>
                    </t>

                   <!--=============other HTML code============-->

                </div>
            </div>
        </t>
    </template>        
</data>
</odoo>

以同样的方式我们可以调用嵌套视图,重用我们想要的一切,例如,我们可以创建另一个导入 calendar.xml 的模板,以便显示索引页面,我们导入日历然后日历导入另一个模板