首页 > 解决方案 > 在 QWeb 模板中设置布尔属性

问题描述

我在使用 QWeb 引擎和布尔 HTML 属性时遇到问题。

我知道在 QWeb 渲染引擎中,我可以使用t-attf-{attribute name}它来设置attribute name格式字符串的值。问题是没有记录的方式(或者至少我无法在文档中找到它)如何根据上下文中的表达式或变量设置布尔属性。

问题是当使用布尔属性时:

如果一个布尔属性存在,它的值为真,如果它不存在,它的值为假。

所以我不能使用t-attf-checkedas usingt-attf-checked=""将放在checked=""标签内。以下也将评估true为标签中标签的简单外观将评估为true

例如,假设我有一个带有多个输入的单选列表和一个名为elem_num. 取决于elem_num单选列表的输入值应该具有布尔属性checked

<input class="custom-control-input" type="radio" t-attf-name="radio-1" t-attf-id="radio-1" value="1"/>
<input class="custom-control-input" type="radio" t-attf-name="radio-2" t-attf-id="radio-2" value="2"/>
<input class="custom-control-input" type="radio" t-attf-name="radio-3" t-attf-id="radio-3" value="3"/>

什么时候elem_num == 0应该检查第一个单选按钮,什么时候应该检查elem_num == 1第二个单选按钮,什么时候应该检查elem_num == 2第三个单选按钮。

如何在不涉及任何 JavaScript 代码的情况下实现这一点?我正在使用 Odoo 14。

任何帮助表示赞赏。

标签: odooqweb

解决方案


您可以有条件地使用t-att=mapping来定义checked属性

来自 QWeb 模板属性文档:

t-att=mapping
   如果参数是一个映射,每个(key, value)对生成一个新的属性和
   它的值

例子:

t-att="elem_num==1 and {'checked': ''} or {}"

推荐阅读