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

如何从ir_config_parameter传递值到qweb视图web.ControlPanel

解决Odoo中向web.ControlPanel视图传递ir.config_parameter参数的问题

问题原因

前端QWeb视图(如web.ControlPanel)运行在浏览器环境中,无法直接访问后端的env对象,所以直接在t-value里写env['ir.config_parameter'].get_param(...)肯定无效。

解决方案(推荐方法:通过JS组件继承传参)

1. 编写JS组件继承ControlPanel

创建static/src/js/control_panel.js文件,通过RPC调用后端获取配置参数,并传递到视图渲染上下文:

odoo.define('your_module.control_panel', function (require) {
    "use strict";

    const ControlPanel = require('web.ControlPanel');
    const rpc = require('web.rpc');

    ControlPanel.include({
        willStart: async function () {
            await this._super(...arguments);
            // 调用后端接口获取配置参数
            this.wantedParameter = await rpc.query({
                model: 'ir.config_parameter',
                method: 'get_param',
                args: ['wanted_parameter'],
            });
        },
        // 将参数注入渲染上下文
        getRenderParams: function () {
            const params = this._super(...arguments);
            params.wanted_parameter = this.wantedParameter;
            return params;
        },
    });
});

2. 在QWeb视图中使用参数

通过继承web.ControlPanel视图,直接使用注入的参数:

<t t-name="web.ControlPanel" t-inherit="web.ControlPanel" t-inherit-mode="extension">
    <xpath expr="//div[hasclass('o_control_panel')]" position="inside">
        <!-- 示例:展示参数值 -->
        <div class="o_control_panel_parameter">
            参数值:<span t-esc="wanted_parameter"/>
        </div>
    </xpath>
</t>

3. 配置资产加载

在模块的__manifest__.py中添加JS文件的加载配置:

'assets': {
    'web.assets_backend': [
        'your_module/static/src/js/control_panel.js',
    ],
},

备选方案(全局注入参数,谨慎使用)

如果需要全局给所有视图注入该参数,可以重写后端视图的渲染方法:

from odoo import models

class IrUiView(models.Model):
    _inherit = 'ir.ui.view'

    def render(self, values=None, engine='ir.qweb', minimal_qcontext=False):
        values = values or {}
        # 获取参数并添加到渲染上下文
        values['wanted_parameter'] = self.env['ir.config_parameter'].get_param('wanted_parameter')
        return super().render(values, engine, minimal_qcontext)

这种方法会让所有QWeb视图都能访问wanted_parameter,适合需要全局使用的场景,但可能造成不必要的性能开销。


内容的提问来源于stack exchange,提问作者EMKEJJU

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 16:12:21