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

在我们的房地产应用程序中,我们想添加一个看板视图来显示我们的房产。看板视图是一种标准的Odoo视图(如表单和列表视图),但它们的结构要灵活得多。事实上,每张卡片的结构都是表单元素(包括基本HTML)和QWeb的混合体。看板视图的定义类似于列表和表单视图的定义,除了它们的根元素是。看板视图的最简单形式如下:
让我们来解析这个例子:
- :定义QWeb模板列表。看板视图必须至少定义一个根模板kanban-box,每个记录将呈现一次。
- : 是QWeb指令的占位符元素。在这种情况下,它用于将模板的名称设置为kanban-box
- :oe_kanban_global_click使可点击以打开记录。
- :这将把name字段添加到视图中。
锻炼
制作一个最小的看板视图。
使用提供的简单示例,为属性创建一个最小的看板视图。唯一要显示的字段是名称。
提示:你必须在相应的ir.actions.act_window的view_mode中添加看板。
一旦看板视图开始工作,我们就可以开始改进它。如果我们想有条件地显示一个元素,我们可以使用t-if指令。
This is new!
我们添加了一些东西:
-
t-if:如果条件为真,则呈现元素。
-
record:将所有请求字段作为其属性的对象。每个字段有两个属性value和raw_value。前者根据当前用户参数进行格式化,后者是read()的直接值。
在上面的例子中,字段名name 被添加到元素中,但是状态state 在元素之外。当我们需要一个字段的值,但不想在视图中显示它时,可以在元素之外添加它。
Kanban
...

看板(kanban)视图是看板的可视化:它将记录显示为“卡片”,介于列表视图和非可编辑表单视图之间。记录可以按列分组,用于工作流可视化或操作(例如任务或工作进度管理),也可以不分组(仅用于可视化记录)。
提示
看板视图将加载并显示最多10列。之后的任何列都将被关闭(但仍然可以被用户打开)。
看板视图的根元素是,可以使用以下属性:
- sample: boolean (default: False)
如果当前模型没有找到,则使用一组示例记录填充视图。默认情况下,该属性为false。
这些假记录将对某些字段名称/模型具有启发式。例如,模型“res”上的字段“display_name”。“用户”将使用示例人名填充,而“电子邮件”字段将以“firstname.lastname@sample.demo”的形式填充。
用户将无法与这些数据进行交互,并且一旦执行操作(创建记录、添加列等),这些数据将被丢弃。
- banner_route: path (可选)
要获取的路由地址,并将其添加到视图之前。
如果设置了此属性,则控制器路由url将被提取并显示在视图上方。来自控制器的json响应应包含一个“html”键。
如果html包含样式表标签,则将其删除并附加到。
要与后端交互,可以使用 标签。请查看 useActionLinks 的文档(插件/web/static/src/views/view_hook.js)了解更多详细信息。
只有扩展了 AbstractView 和 AbstractController 的视图才能使用此属性,如 Form、Kanban、List 等。
例子:
class MyController(odoo.http.Controller):
@http.route('/module_name/hello', auth='user', type='json')
def hello(self):
return {
'html': """本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/60a9ab5585.html
