Odoo-自定义模板菜单加载

coo*_*ool 6 python odoo

目前,我正在研究odoo模块,该模块需要有自己的(定制和设计的)仪表板。因此,只有当用户登录到后端(他可以管理应用程序,设置和类似内容)时,该仪表板才可见。

似乎唯一可行的方法是创建一个单独的控制器,渲染为该控制器/仪表板实现的特定模板,并将其与菜单按钮绑定。

没关系,但是当我们渲染模板时,它是空白的。我想为此模板加载标准的后端菜单-并在模板主体上正常工作。

我可以继承任何视图,也可以使用任何方式创建模板,以自动为该模板加载顶部菜单栏吗?


我试图继承“ web.webclient_bootstrap ”模板,并在此模板的主要div内附加内容,但无法正常工作。似乎在继承此模板时,session_info为空?

coo*_*ool 6

在研究了odoo源代码之后-与更多参与odoo开发的人们进行了讨论-总体而言-与odoo进行了更多合作-我找到了实现此目的的方法。

最初的问题有一个错误的假设-这可以通过使用控制器进行渲染来实现。需要了解的重要一点是-odoo后端呈现为“单个js页面”,并且仪表板端的任何类型的自定义(odoo默认不提供,您可以在视图中定义)-需要通过以下方式完成创建js小部件并直接使用javascript更改dom对象。

下面的解决方案在仪表板侧代表一个动作/页面-这将呈现空白页面,其中仅带有“ Test”字样。

odoo.define("mymodule.customdashboard", function (require) {
    "use strict";

    var core = require("web.core");
    var AbstractAction = require("web.AbstractAction");
    var Widget = require("web.Widget");

    var qweb = core.qweb;
    var _t = core._t;

    require("web.dom_ready");

    var CustomDashboard = AbstractAction.extend({
        template: "custom_dashboard",
        events: {
        },

        init: function(parent, action){
            this._super.apply(this, arguments);
            var options = action.params || {};
            this.params = options;
        },

        start: function(){
            this.$(".dashboard-wrapper").append(qweb.render("campaign_dashboard_campaign_list", {"someArgData": "Test"}));
        }
    });

    core.action_registry.add("custom.dashboard", CustomDashboard);

    return {
        CustomDashboard: CustomDashboard
    }
});
Run Code Online (Sandbox Code Playgroud)

Where campaign_dashboard_campaign_list is name of the template WHICH is going to be invoked AND with parameter, inserted with all of the html data into the dom element which contains class .dashboard-wrapper (which exists in another template called custom_dashboard defined at the top of the class.