翼度科技»论坛 编程开发 python 查看内容

odoo 开发入门教程系列-QWeb简史

10

主题

10

帖子

30

积分

新手上路

Rank: 1

积分
30
QWeb简史

到目前为止,我们的房地产模块的界面设计相当有限。构建列表视图很简单,因为只需要字段列表。表单视图也是如此:尽管使用了一些标记,如或,但在设计方面几乎没有什么可做的。
然而,如果我们想给我们的应用程序一个独特的外观,就必须更进一步,能够设计新的视图。此外,PDF报告或网站页面等其他功能需要另一个更灵活的工具:模板引擎。
您可能已经熟悉现有的引擎,如Jinja(Python)、ERB(Ruby) 或Twig(PHP)。Odoo自带内置引擎:QWeb模板。QWeb是Odoo使用的主要模板引擎。它是一个XML模板引擎,主要用于生成HTML片段和页面。
你可能已经在Odoo见过 看板,其中的记录以卡片状结构显示。我们将为我们的房地产模块构建这样的视图。
一个具体的示例: 一个看板视图

参考: 本主题关联文档可以查看Kanban.
目标: 本节结束时创建一个房产的看板视图

在我们的地产应用程序中,我们希望添加一个看板视图来显示我们的房产。看板视图是标准的Odoo视图(如表单和列表视图),但其结构更灵活。事实上,每张卡片的结构是表单元素(包括基本HTML)和QWeb的混合。看板视图的定义与列表视图和表单视图的定义相似,只是它们的根元素是kanban。看板视图最简单的形式如下:
  1. <kanban>
  2.     <templates>
  3.         <t t-name="kanban-box">
  4.             <kanban default_group_by="state" records_draggable="false">
  5.             <kanban default_group_by="state" records_draggable="false">    <field name="name"/>
  6.             <kanban default_group_by="state" records_draggable="false">
  7.         </t>
  8.     </templates>
  9. </kanban>
复制代码
让我们分解一下这个例子:

  • <templates>:定义QWeb 模板列表。看板视图必须至少定义一个根模板kanban-box,每个记录将呈现一次。
  • :是QWeb指令的占位符元素。在本例中,它用于将模板的name设置为kanban-box
  • :oe_kanban_global_click让可点击,以打开记录
  • :这向视图中添加name字段。
练习--制作一个最小的看版视图
根据上述提供的简单例子,为房产创建一个最小化的看板视图。唯一展示的字段为name.
提示: 必须在ir.actions.act_window对应的view_mode中添加 kanban
修改odoo14\custom\estate\views\estate_property_views.xml(注意:以下未展示文件中的所有内容,其它内容保持不变)
  1.             <kanban default_group_by="state" records_draggable="false">Properties        estate.property        kanban,tree,form        {'search_default_state': True}            <kanban default_group_by="state" records_draggable="false">           estate.property<kanban>
  2.     <templates>
  3.         <t t-name="kanban-box">
  4.             <kanban default_group_by="state" records_draggable="false">
  5.             <kanban default_group_by="state" records_draggable="false">    <field name="name"/>
  6.             <kanban default_group_by="state" records_draggable="false">
  7.         </t>
  8.     </templates>
  9. </kanban><kanban>
  10.     <templates>
  11.         <t t-name="kanban-box">
  12.             <kanban default_group_by="state" records_draggable="false">
  13.             <kanban default_group_by="state" records_draggable="false">    <field name="name"/>
  14.             <kanban default_group_by="state" records_draggable="false">
  15.         </t>
  16.     </templates>
  17. </kanban><kanban>
  18.     <templates>
  19.         <t t-name="kanban-box">
  20.             <kanban default_group_by="state" records_draggable="false">
  21.             <kanban default_group_by="state" records_draggable="false">    <field name="name"/>
  22.             <kanban default_group_by="state" records_draggable="false">
  23.         </t>
  24.     </templates>
  25. </kanban>
复制代码
重启服务验证

一旦看板视图起作用, 我们可以开始改进它。如果我们想有条件的展示元素,可以使用 t-if指令(查看 Conditionals).
  1. <kanban>
  2.     <templates>
  3.         <t t-name="kanban-box">
  4.             <kanban default_group_by="state" records_draggable="false">
  5.             <kanban default_group_by="state" records_draggable="false">    <field name="name"/>
  6.             <kanban default_group_by="state" records_draggable="false">
  7.         </t>
  8.     </templates>
  9. </kanban>            <kanban default_group_by="state" records_draggable="false">        This is new!            <kanban default_group_by="state" records_draggable="false">            <kanban default_group_by="state" records_draggable="false">
复制代码
我们添加了几个东西:

  • t-if: 如果条件为真,渲染元素
  • record: 拥有所有请求字段作为其属性的对象。每个字段都有两个属性  value 和raw_value。前者是根据当前用户参数格式化的,后者则是直接通过read()读取的。
在上面的示例中,字段name被添加到元素中,但state在它之外。当我们需要字段的值但不想在视图中显示它时,可以将其添加到元素之外。
练习--改善看板视图
添加以下字段到看板视图:expected price, best price, selling price 和tags。注意:best price仅在收到报价时展示,而selling price仅在接受报价时展示
修改odoo14\custom\estate\views\estate_property_views.xml estate_property_kanban
  1.             <kanban default_group_by="state" records_draggable="false">estate.property<kanban>
  2.     <templates>
  3.         <t t-name="kanban-box">
  4.             <kanban default_group_by="state" records_draggable="false">
  5.             <kanban default_group_by="state" records_draggable="false">    <field name="name"/>
  6.             <kanban default_group_by="state" records_draggable="false">
  7.         </t>
  8.     </templates>
  9. </kanban><kanban>
  10.     <templates>
  11.         <t t-name="kanban-box">
  12.             <kanban default_group_by="state" records_draggable="false">
  13.             <kanban default_group_by="state" records_draggable="false">    <field name="name"/>
  14.             <kanban default_group_by="state" records_draggable="false">
  15.         </t>
  16.     </templates>
  17. </kanban><kanban>
  18.     <templates>
  19.         <t t-name="kanban-box">
  20.             <kanban default_group_by="state" records_draggable="false">
  21.             <kanban default_group_by="state" records_draggable="false">    <field name="name"/>
  22.             <kanban default_group_by="state" records_draggable="false">
  23.         </t>
  24.     </templates>
  25. </kanban><kanban>
  26.     <templates>
  27.         <t t-name="kanban-box">
  28.             <kanban default_group_by="state" records_draggable="false">
  29.             <kanban default_group_by="state" records_draggable="false">    <field name="name"/>
  30.             <kanban default_group_by="state" records_draggable="false">
  31.         </t>
  32.     </templates>
  33. </kanban><kanban>
  34.     <templates>
  35.         <t t-name="kanban-box">
  36.             <kanban default_group_by="state" records_draggable="false">
  37.             <kanban default_group_by="state" records_draggable="false">    <field name="name"/>
  38.             <kanban default_group_by="state" records_draggable="false">
  39.         </t>
  40.     </templates>
  41. </kanban><kanban>
  42.     <templates>
  43.         <t t-name="kanban-box">
  44.             <kanban default_group_by="state" records_draggable="false">
  45.             <kanban default_group_by="state" records_draggable="false">    <field name="name"/>
  46.             <kanban default_group_by="state" records_draggable="false">
  47.         </t>
  48.     </templates>
  49. </kanban><kanban>
  50.     <templates>
  51.         <t t-name="kanban-box">
  52.             <kanban default_group_by="state" records_draggable="false">
  53.             <kanban default_group_by="state" records_draggable="false">    <field name="name"/>
  54.             <kanban default_group_by="state" records_draggable="false">
  55.         </t>
  56.     </templates>
  57. </kanban>            <kanban default_group_by="state" records_draggable="false">        
复制代码
注意:这里必须添加,否则界面会报类似以下错误:
  1. odoo TypeError: Cannot read properties of undefined (reading 'value')
复制代码
验证效果

让我们对视图做最后的修改:默认情况下,财产必须按类型分组。您可能想看看Kanban中描述的各种选项。
练习--添加默认分组
使用合适的属性对房产分组,默认按类型分组。你必须阻止拖拽和删除。
修改odoo14\custom\estate\views\estate_property_views.xml estate_property_kanban,给增加属性
  1.             <kanban default_group_by="state" records_draggable="false">
复制代码
验证效果

看板视图是一个典型的例子,说明从现有视图开始并对其进行微调而不是从头开始总是一个好主意。
参考链接

https://www.odoo.com/documentation/14.0/zh_CN/developer/howtos/rdtraining.html
https://fontawesome.dashgame.com/

来源:https://www.cnblogs.com/shouke/p/17253437.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具