odoo17 | Qweb模板简介

news2024/11/19 20:15:52

前言

到目前为止,我们的房地产模块的界面设计还相当有限。构建列表视图很简单,因为只需要字段列表。表单视图也是如此:尽管使用了几个标签,如 <group>标签或 <page>标签 ,但在设计方面几乎没什么可做的。

然而,如果我们想为我们的应用程序提供独特的外观,就必须更进一步,能够设计新的视图。此外,其他功能,如PDF报告或网站页面,需要另一种工具来创建,以提供更大的灵活性:模板引擎。

你可能已经熟悉了现有的引擎,如 Jinja(Python)ERB(Ruby)Twig(PHP)。Odoo 自带其内置引擎:QWeb 模板。QWebOdoo 使用的主要模板引擎。它是一个 XML 模板引擎,主要用于生成 HTML 片段和页面。

您可能已经在Odoo中遇到过看板,其中的记录以卡片式结构显示。我们将为我们的房地产模块构建这样的视图。

具体例子:看板视图

目标

  • 创建一个看板视图
    在这里插入图片描述
    在我们的房地产应用程序中,我们想添加一个看板视图来显示我们的房产。看板视图是一种标准的Odoo视图(如表单和列表视图),但它们的结构要灵活得多。事实上,每张卡片的结构都是表单元素(包括基本HTML)和QWeb的混合体。看板视图的定义类似于列表和表单视图的定义,除了它们的根元素是<kanban>。看板视图的最简单形式如下:
<kanban>
    <templates>
        <t t-name="kanban-box">
            <div class="oe_kanban_global_click">
                <field name="name"/>
            </div>
        </t>
    </templates>
</kanban>

让我们来解析这个例子:

  • <templates>:定义QWeb模板列表。看板视图必须至少定义一个根模板kanban-box,每个记录将呈现一次。
  • <t t-name=“kanban-box”>:<t> 是QWeb指令的占位符元素。在这种情况下,它用于将模板的名称设置为kanban-box
  • <div class=“oe_kanban_global_click”>:oe_kanban_global_click使<div>可点击以打开记录。
  • <field name=“name”/>:这将把name字段添加到视图中。

锻炼

制作一个最小的看板视图。

使用提供的简单示例,为属性创建一个最小的看板视图。唯一要显示的字段是名称。

提示:你必须在相应的ir.actions.act_window的view_mode中添加看板。

一旦看板视图开始工作,我们就可以开始改进它。如果我们想有条件地显示一个元素,我们可以使用t-if指令。

<kanban>
    <field name="state"/>
    <templates>
        <t t-name="kanban-box">
            <div class="oe_kanban_global_click">
                <field name="name"/>
                <div t-if="record.state.raw_value == 'new'">
                    This is new!
                </div>
            </div>
        </t>
    </templates>
</kanban>

我们添加了一些东西:

  • t-if:如果条件为真,则呈现<div>元素。

  • record:将所有请求字段作为其属性的对象。每个字段有两个属性valueraw_value。前者根据当前用户参数进行格式化,后者是read()的直接值。

在上面的例子中,字段名name 被添加到<templates>元素中,但是状态state 在元素之外。当我们需要一个字段的值,但不想在视图中显示它时,可以在<templates>元素之外添加它。

Kanban

<kanban>
  ...
</kanban>

在这里插入图片描述
看板(kanban)视图是看板的可视化:它将记录显示为“卡片”,介于列表视图和非可编辑表单视图之间。记录可以按列分组,用于工作流可视化或操作(例如任务或工作进度管理),也可以不分组(仅用于可视化记录)。
提示
看板视图将加载并显示最多10列。之后的任何列都将被关闭(但仍然可以被用户打开)。

看板视图的根元素是<kanban>,可以使用以下属性:

  • sample: boolean (default: False)

如果当前模型没有找到,则使用一组示例记录填充视图。默认情况下,该属性为false。

这些假记录将对某些字段名称/模型具有启发式。例如,模型“res”上的字段“display_name”。“用户”将使用示例人名填充,而“电子邮件”字段将以“firstname.lastname@sample.demo”的形式填充。

用户将无法与这些数据进行交互,并且一旦执行操作(创建记录、添加列等),这些数据将被丢弃。

  • banner_route: path (可选)
    要获取的路由地址,并将其添加到视图之前。

如果设置了此属性,则控制器路由url将被提取并显示在视图上方。来自控制器的json响应应包含一个“html”键。

如果html包含样式表<link>标签,则将其删除并附加到<head>。

要与后端交互,可以使用 标签。请查看 useActionLinks 的文档(插件/web/static/src/views/view_hook.js)了解更多详细信息。

只有扩展了 AbstractViewAbstractController 的视图才能使用此属性,如 Form、Kanban、List 等。

例子:

<tree banner_route="/module_name/hello" />
class MyController(odoo.http.Controller):
    @http.route('/module_name/hello', auth='user', type='json')
    def hello(self):
        return {
            'html': """
                <div>
                    <link href="/module_name/static/src/css/banner.css"
                        rel="stylesheet">
                    <h1>hello, world</h1>
                </div> """
        }
  • string: string (default: ‘’)

此视图标题仅在您打开没有名称且目标为“新建”(打开对话框)的操作时显示。

  • create: boolean (default: True)

在视图中禁用/启用记录创建。

  • edit: boolean (default: True)

在视图中禁用/启用记录编辑。

  • delete:boolean (default: True)

通过Action下拉菜单禁用/启用视图上的记录删除。

  • default_group_by: string (选) model field name

如果通过操作或当前搜索未指定分组,是否应该对看板视图进行分组。如果没有指定分组,则应使用哪个字段进行分组。

  • default_order: string (可选) 模型字段名

如果用户尚未对记录进行排序(通过列表视图),则使用卡片排序顺序。

  • class: string (可选) HTML标签的 class属性

为看板视图的根HTML元素添加HTML的class属性。

  • examples: string (可选)

如果设置为 KanbanExamplesRegistry 中的一个键,则列设置上的示例将在分组看板视图中可用。以下是定义这些设置的示例。

  • group_create: boolean (default: True)

“添加新列”栏是否可见。

  • group_delete: boolean (default: True)

是否可以通过上下文菜单删除组。

  • group_edit: boolean (default: True)

是否可以通过上下文菜单编辑组。

  • archivable: boolean (default: True)

如果模型上定义了活动字段,则属于列的记录是否可以存档/恢复。

  • quick_create: boolean (default: True)

是否应能够在不切换到表单视图的情况下创建记录。默认情况下,当看板视图按 many2oneselectioncharboolean 字段分组时,启用 quick_create,否则禁用。

  • quick_create_view: string (optional)

表单视图引用,指定用于记录快速创建的视图。

-records_draggable: boolean (default: True)

否应在看板分组时拖动记录。设置为 True 始终启用,设置为 False 始终禁用。

  • groups_draggable: boolean (default: True)

是否应在看板分组时重新排序列。设置为 True 始终启用,设置为 False 始终禁用。

看板视图中可能包含的子元素有:field、progressbar 或 templates。

<field>: 格式化渲染字段值

<kanban>
  <field name="FIELD_NAME"/>
  ...
</kanban>

声明要在看板逻辑中使用的字段。如果字段仅在看板视图中显示,则无需预先声明。

字段可以使用以下属性:

  • name: String(必选)模型字段名
    要获取的字段的名称
<kanban>
  <templates>
    <t t-name="kanban-box">
      <div>
        <field name="name"/>
      </div>
    </t>
  </templates>
</kanban>

在这里插入图片描述

<header>:在控制面板中的自定义按钮

<kanban>
  <header>
    <BUTTONS/>
  </header>
  ...
</kanban>

<button>

定义自定义按钮,类似于控制面板中的列表视图按钮,用于执行操作/调用模型的方法。当放置在头部时接受额外属性的按钮:

  • display: string 只为 display 或者 always (default: display)
    默认情况下,这些按钮仅在选中一些记录时才显示,并且应用于所选记录。当将 display 属性设置为 always 时,即使没有选择,按钮也始终可用。
<header>
    <button name="toDoAlways" type="object" string="Always displayed" display="always"/>
    <button name="toDoSelection" type="object" string="Displayed if selection"/>
</header>

提示 :目前的odoo版本,只有always选项是可用的,因为还不可能在看板视图中选择记录。后续的版本马上会做到。

<progressbar>: 视图列顶部的进度条

<kanban>
  <progressbar field="FIELD_NAME"/>
  ...
</kanban>

声明要放在看板列顶部的进度条元素。

可能的属性有:

  • field: string (必选) 模型字段名

字段的名称,其值用于对进度条中的列记录进行子分组

  • colors:JSON (必选)
    JSON将上述字段值映射为“danger”、“warning”、“success”或“静muted” 的颜色
  • sum_field: string (可选) 模型字段名
    字段的名称,其列记录的值将被求和并显示在进度条旁边(如果省略,则显示记录的总数)。
<kanban>
  <progressbar field="activity_state"
      colors="{'planned': 'success', 'today': 'warning', 'overdue': 'danger'}"
      sum_field="expected_revenue"/>
  <templates>
    ...
  </templates>
</kanban>

在这里插入图片描述

\ : 卡片模板

<kanban>
  ...
  <templates>
    <t t-name="kanban-box">
      <div>
        <field name="name"/>
      </div>
    </t>
  </templates>
</kanban>

定义了一个 QWeb 模板列表。卡片定义可以为了清晰而拆分为多个模板,但看板视图必须定义至少一个根模板 kanban-box,该模板将为每个记录渲染一次。

可以定义另外两个模板:kanban-menukanban-tooltip。如果定义了这两个模板,kanban-menu 模板将在卡片右上方的垂直省略号 (⋮) 上的下拉菜单中渲染。当鼠标悬停在看板卡片上时,kanban-tooltip 模板将在工具提示中渲染。

看板视图使用标准的 JavaScript qweb,并提供以下上下文变量:

  • widget
    当前的KanbanRecord()可用于获取一些元信息。这些方法也可以直接在模板上下文中使用,不需要通过小部件访问

  • record
    一个对象,所有请求的字段都是它的属性。每个字段都有两个属性 value 和 raw_value,前者根据当前用户参数格式化,后者是 read() 的直接值(除了 date 和 datetime 字段,它们根据用户的语言环境格式化)

  • context
    当前context上下文,来自动作,以及在表单视图中嵌入看板视图的情况下的一个2多个或多个2多个字段

  • user_context
    用户上下文

  • read_only_mode
    只读模式

  • selection_mode
    选择模式,当从many2One/many2Many字段在移动环境中打开看板视图以选择记录时,设置为true。

提示: 在移动端环境中单击many2One/many2Many 字段将打开看板视图。

buttons 和 fields

虽然大多数看板模板都是标准的QWeb模板,但看板视图对 field, buttona标签元素进行了特殊处理:

  • 默认情况下,字段被替换为其格式化值,除非指定了小部件属性,在这种情况下,它们的呈现和行为取决于相应的小部件。可能的值包括(除其他外):

handle
用于按顺序(或整数)字段对记录进行排序,允许拖放记录以对其进行重新排序。

  • 具有type属性的按钮和链接将执行与Odoo相关的操作,而不是其标准的HTML功能。可能的类型有:

action, object
Odoo按钮的标准行为,可以使用与标准Odoo按钮相关的多数属性。

open
在只读模式下以窗体视图打开卡的记录

edit
在可编辑模式下在表格视图中打开卡的记录

delete
删除卡的记录并移除卡

结束

看板视图是一个典型的例子,说明从现有的 查看并微调它,而不是从头开始。有很多选项和类 可用,所以…阅读和学习!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1389635.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java数据结构】04-图(Prim,Kruskal,Dijkstra,topo)

5 图 推荐辅助理解 【视频讲解】bilibili Dijkstra Prim 【手动可视化】Algorithm Visualizer &#xff08;https://algorithm-visualizer.org/&#xff09; 【手动可视化】Data Structure Visualizations (https://www.cs.usfca.edu/~galles/visualization/Algorithms.ht…

Python 捕获异常(Try Except Exception)

目录 前言 常见的十类异常类型&#xff1a; try...except...else语句 格式 示例1 示例2 捕获所有异常&#xff08;常用&#xff09; 格式 示例 try...except...finally语句 格式 示例 前言 异常捕获就是针对某一部分可能出错的代码&#xff0c;在运行期间一旦出现…

免费开源OCR 软件Umi-OCR

Umi-OCR 是一款免费、开源、可批量的离线 OCR 软件&#xff0c;基于 PaddleOCR&#xff0c;适用于 Windows10/11 平台 免费&#xff1a;本项目所有代码开源&#xff0c;完全免费。方便&#xff1a;解压即用&#xff0c;离线运行&#xff0c;无需网络。高效&#xff1a;自带高效…

Dhcp中继ensp

拓扑图 <Huawei>system-view [Huawei]sysname SW1 [SW1]vlan batch 10 20 [SW1]int e0/0/1 #配置access接口 [SW1-Ethernet0/0/1]port link-type access [SW1-Ethernet0/0/1]port default vlan 10 [SW1-Etherne…

基于4G数采终端的供热管网在线监测方案

我国大部地区全面进入到冬季&#xff0c;北方各地已开启冬季供暖&#xff0c;以保障居民生活所需。由于城市化的发展&#xff0c;城市内各供热区域愈发分散、供热管道漫长、供热环境复杂&#xff0c;对于供热管网及换热站点的监测和维护提出了诸多挑战。 方案介绍 针对提高供热…

0、C++预备知识

文章目录 C与C语言为什么要学习CC为什么难学c值得学习的新特征C参考书籍开发工具 可移植性和标准程序创建的技巧编译和链接 C与C语言 C是一种计算机高级程序设计语言&#xff0c;C既可以进行C语言的过程化程序设计&#xff0c;又可以进行以抽象数据类型为特点的基于对象的程序…

强化学习11——DQN算法

DQN算法的全称为&#xff0c;Deep Q-Network&#xff0c;即在Q-learning算法的基础上引用深度神经网络来近似动作函数 Q ( s , a ) Q(s,a) Q(s,a) 。对于传统的Q-learning&#xff0c;当状态或动作数量特别大的时候&#xff0c;如处理一张图片&#xff0c;假设为 210 160 3 …

Android性能优化 | DEX 布局优化和启动配置文件

Android性能优化 | DEX 布局优化和启动配置文件 引言 使用DEX布局优化和启动配置文件是优化Android应用性能的有效途径。DEX布局优化可以通过优化应用程序中的DEX文件布局&#xff0c;从而加快Android应用的启动速度和执行速度。启动配置文件则提供了一种灵活的方式来控制应用…

SDRAM小项目——命令解析模块

简单介绍&#xff1a; 在FPGA中实现命令解析模块&#xff0c;命令解析模块的用来把pc端传入FPGA中的数据分解为所需要的数据和触发命令&#xff0c;虽然代码不多&#xff0c;但是却十分重要。 SDRAM的整体结构如下&#xff0c;可以看出&#xff0c;命令解析模块cmd_decode负责…

知存科技助力AI应用落地:WTMDK2101-ZT1评估板实地评测与性能揭秘

文章目录 一、前言二、深入了解存算一体技术2.1 什么是存算一体2.2 存算一体技术发展历程2.3 基于不同存储介质的存内计算芯片性能比较 三、国产存算一体&#xff0c;重大进展3.1 知存科技&#xff1a;我国存算一体领域的研发领导者 四、知存科技新型 WTM2101 SOC 评估板使用评…

【RTOS】快速体验FreeRTOS所有常用API(9)中断管理

目录 九、中断管理9.1 基本概念9.2 两套API9.3 中断服务程序 九、中断管理 该部分暂无代码 9.1 基本概念 FreeRTOS中的中断管理主要涉及&#xff1a;两套API、中断服务编写 不能阻塞、不能处理耗时任务ISR的优先级高于任务&#xff1a;即使是优先级最低的中断&#xff0c;它的…

【小黑嵌入式系统第十五课】μC/OS-III程序设计基础(四)——消息队列(工作方式数据通信生产者消费者模型)、动态内存管理、定时器管理

上一课&#xff1a; 【小黑嵌入式系统第十四课】μC/OS-III程序设计基础&#xff08;三&#xff09;——信号量&#xff08;任务同步&资源同步&#xff09;、事件标记组&#xff08;与&或&多个任务&#xff09; 前些天发现了一个巨牛的人工智能学习网站&#xff0c…

美媒:OpenAI删除了禁止其技术被用于军事用途的条款

据美国调查新闻网站“拦截者”&#xff08;The Intercept&#xff09;1月12日报道&#xff0c;美国知名人工智能企业、ChatGPT母公司OpenAI近日悄悄修改了其产品的使用条款&#xff0c;删除了禁止将OpenAI技术用于军事用途的条文。 报道称&#xff0c;在今年1月10日之前&#…

Springboot+vue的智能无人仓库管理(有报告),Javaee项目,springboot vue前后端分离项目

演示视频&#xff1a; Springbootvue的智能无人仓库管理&#xff08;有报告&#xff09;&#xff0c;Javaee项目&#xff0c;springboot vue前后端分离项目 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的智能无人仓库管理&#xff0c;采用M&#xff08…

基于Springboot的私人健身与教练预约管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的私人健身与教练预约管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三…

java基础:求数组的和以及平均数案例分析

/* * * 解题思路&#xff1a;首先定义一个包含数字的数组hens&#xff0c; * 然后使用循环遍历数组中的每个元素&#xff0c;并将其累加到sum变量中。 * 最后&#xff0c;将sum除以数组长度得到平均值avg。最终将结果打印输出到控制台。*/ 代码如下&#xff1a; package idea;…

机器学习算法实战案例:GRU 实现多变量多步光伏预测

文章目录 1 数据处理1.1 数据集简介1.2 导入库文件1.3 数据集处理1.4 训练数据构造 2 模型训练与预测2.1 模型训练2.2 模型多步预测2.3 预测可视化 答疑&技术交流机器学习算法实战案例系列 1 数据处理 1.1 数据集简介 实验数据集采用数据集7&#xff1a;常州普利司通光伏…

[linux]同步缓冲区数据到flash

一、需求 由于linux自身策略问题&#xff0c;在某些情况下需主动同步数据到flash。 二、方案 同步数据的两种方式&#xff1a;sync和fsync 2.1sync 将整个缓冲区同步至flash。性能较差。 2.2fsync -d [file] 将某一文件的数据同步至flash。 三、应用实例 3.1sync 3.2f…

虚拟服务器的监控和管理

IT 网络中虚拟环境的出现给 IT 管理员带来了一些挑战&#xff0c;虚拟环境降低了管理硬件和软件的成本和复杂性&#xff0c;同时&#xff0c;他们通常需要 IT 管理员管理更多的空间&#xff0c;以确保完全可见和快速解决问题。 虚拟服务器在现代 IT 基础架构中越来越普遍&…

NXP采用RS RTS测试系统,验证28纳米RFCMOS雷达单芯片 |百能云芯

Rohde & Schwarz的雷达目标模拟器R&S RTS&#xff0c;作为汽车雷达的颠覆性解决方案&#xff0c;尤其是其能够电子模拟非常近距离物体的能力&#xff0c;已被用于验证NXP半导体的下一代雷达传感器参考设计的性能。 这一合作使汽车行业在汽车雷达的发展上迈出了一步&…