Odoo网站视图代码内Qweb值获取及div脚本data-configid字段值查询
嘿,针对你问的这两个Odoo网站开发的问题,我结合实际项目经验给你梳理下可行的解决办法:
1. 在Odoo网站视图的代码中获取Qweb值
这里分两种常见场景来处理:
在Qweb模板内直接调用或展示
如果是在网站的Qweb模板文件里,直接用双大括号{{ }}就能渲染或引用Qweb上下文里的值。比如控制器传递过来的变量、当前记录集的字段都可以这么用:<!-- 示例:展示当前登录用户的名称 --> <p>当前用户:{{ request.env.user.name }}</p> <!-- 示例:把Qweb值赋值给JS变量 --> <script> const currentUserId = {{ request.env.user.id }}; const userName = '{{ request.env.user.name }}'; </script>要是需要批量处理数据,还可以用
t-foreach循环遍历集合,比如遍历产品列表:<t t-foreach="products" t-as="product"> <div>{{ product.name }} - {{ product.price }}</div> </t>在网站JS组件中获取已渲染的Qweb值
如果你是在Odoo的网站JS组件(比如继承website.Widget的自定义组件)里,想要获取模板渲染后的内容,可以通过DOM查询来拿到:// 假设模板里有个渲染了产品名称的元素 // <span class="product-name">{{ product.name }}</span> const productName = this.$('.product-name').text(); console.log('产品名称:', productName);
2. 在带有data-configid属性的div脚本中获取字段folder.x_code的值
这种情况通常是div的data-configid对应着folder记录的ID,我们有两种方式获取x_code字段值:
直接在模板中添加额外data属性(最简单的方式)
渲染这个div的时候,直接把folder.x_code也作为data属性写进去,后续脚本直接读取即可:<!-- 模板里渲染div时,同时绑定x_code到data属性 --> <div class="folder-box" data-configid="{{ folder.id }}" data-x-code="{{ folder.x_code }}"> <!-- div内容 --> </div> <!-- 对应的脚本 --> <script> // 假设你知道目标configid的值,或者通过选择器找到对应的div const targetDiv = document.querySelector('[data-configid="123"]'); // 直接读取data属性的值 const folderXCode = targetDiv.dataset.xCode; console.log('Folder X Code:', folderXCode); </script>通过RPC调用从后端获取(适合无法提前渲染字段的场景)
如果没办法在模板里提前渲染x_code,可以通过Odoo的RPC接口,用data-configid对应的ID去后端查询该字段:const targetDiv = document.querySelector('[data-configid="123"]'); const folderId = parseInt(targetDiv.dataset.configid); // 调用Odoo RPC接口查询字段 odoo.rpc('/web/dataset/call_kw', { model: 'your.folder.model', // 替换成folder对应的模型名,比如'document.folder' method: 'read', args: [[folderId], ['x_code']], // 指定要查询的字段 kwargs: {}, }).then(result => { if (result.length > 0) { const folderXCode = result[0].x_code; console.log('Folder X Code:', folderXCode); // 这里可以添加你的业务逻辑 } }).catch(error => { console.error('获取x_code失败:', error); });要是你是在Odoo的自定义JS组件里写这段逻辑,推荐用组件自带的
_rpc方法,更符合Odoo的开发规范:this._rpc({ model: 'your.folder.model', method: 'read', args: [[folderId], ['x_code']], }).then(result => { const folderXCode = result[0].x_code; // 处理逻辑 });
内容的提问来源于stack exchange,提问作者Pelingier
相关产品推荐
相关产品推荐

