You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:07:25