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

求助:Odoo16按官方文档配置JS文件无报错但无法加载

Odoo16 前端JS文件无法加载问题排查与解决

问题场景

在Odoo16中尝试为/shop页面加载自定义JS文件,已配置manifest.py但文件始终未加载,且无任何报错信息,目标是在商品列表页执行自定义逻辑。

现有配置代码

manifest.py

# -*- coding: utf-8 -*-
{
    "name": "Test Module",
    'version': '1.0',
    'category': 'Theme',
    "depends": ['base','website','website_sale_wishlist' ],
    'assets': {
        'web.assets_frontend': [
            'TestModule/static/src/js/content/testfile.js'
        ],
    },
    'installable': True,
    'auto_install': True
}

自定义JS文件

odoo.define('TestModule.testfile', function (require) {
'use strict';
var publicWidget = require('web.public.widget');

publicWidget.registry.testWebsite = publicWidget.Widget.extend({

    selector:'.o_wsale_products_main_row',
    init() {
        console.log('=============');
    },
 })

});

排查与解决步骤

1. 路径与命名校验

  • 确认模块目录名与manifest.py中的模块名完全一致(Odoo对大小写敏感),比如TestModule需和实际模块文件夹名称完全匹配
  • 检查JS文件路径:TestModule/static/src/js/content/testfile.js是否与实际文件位置一致,确保文件存在且路径无拼写错误

2. 资产打包与缓存清理

Odoo会对前端资产进行打包缓存,修改配置后必须清理缓存:

  • 方式一:开发者模式下,点击右上角组件图标,选择清除缓存并重新加载资产
  • 方式二:执行命令行强制重新打包资产:
./odoo-bin --addons-path=addons --save --stop-after-init

3. 优化JS注册逻辑

当前JS仅定义了Widget,但未完成完整的注册启动流程,Odoo无法自动初始化该组件:
修改JS文件,补充初始化逻辑并确保组件被正确注册:

odoo.define('TestModule.testfile', function (require) {
    'use strict';
    var publicWidget = require('web.public.widget');

    publicWidget.registry.testWebsite = publicWidget.Widget.extend({
        selector: '.o_wsale_products_main_row',
        // 调用父类init方法,确保Odoo组件生命周期正常
        init: function () {
            this._super.apply(this, arguments);
            console.log('============= Widget 初始化 =============');
        },
        // 可选:添加start方法,组件挂载完成后执行逻辑
        start: function () {
            console.log('============= Widget 启动 =============');
            return this._super.apply(this, arguments);
        }
    });

    // 显式指定组件附加目标,确保Odoo能找到对应的DOM元素并初始化
    publicWidget.registry.testWebsite.attachTo = '.o_wsale_products_main_row';

    return publicWidget.registry.testWebsite;
});

4. 精准绑定页面资产

原配置使用web.assets_frontend会将JS加载到所有前端页面,若仅需在/shop页面加载,建议改为绑定website_sale模块的资产(/shop属于website_sale页面),同时显式依赖website_sale模块:
修改manifest.py:

# -*- coding: utf-8 -*-
{
    "name": "Test Module",
    'version': '1.0',
    'category': 'Theme',
    "depends": ['base','website','website_sale'],  # 显式依赖website_sale,确保资产加载时机正确
    'assets': {
        'website_sale.assets_frontend': [
            'TestModule/static/src/js/content/testfile.js'
        ],
    },
    'installable': True,
    'auto_install': False  # 关闭自动安装,避免模块被不必要的自动安装
}

5. 验证加载状态

  • 打开浏览器开发者工具(F12),切换到Network标签,刷新/shop页面,搜索testfile.js,确认是否有请求记录:
    • 若返回404:检查路径是否正确
    • 若无请求记录:确认资产配置是否正确,模块是否已升级
  • 切换到Console标签,查看是否有隐藏的报错信息(如依赖模块缺失)

最终操作流程

  1. 卸载并重新安装(或升级)Test Module模块
  2. 清除Odoo缓存并重新加载资产
  3. 刷新/shop页面,打开浏览器控制台查看日志输出

内容的提问来源于stack exchange,提问作者محسن زنگانه

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 11:35:20