如何在Odoo 11中重写及美化数据库选择页面?需建模块吗?
嘿,我来一步步教你搞定这个需求——完全不用动Odoo的核心文件,用自定义模块就能实现重写和美化,还能避免升级时被覆盖的问题!
一、要不要创建新模块?必须要!
直接修改/web/views/database_manage.html这种核心文件绝对是大忌,下次升级Odoo你的修改就没了。所以一定要做一个独立的自定义模块,所有修改都放在里面。
二、模块要装到哪个数据库?其实不用装到特定库!
这个有点特殊:数据库选择页面是Odoo启动后还没进入任何数据库时显示的全局页面,所以你的模块只需要被Odoo识别加载就行,不需要安装到某个具体的数据库。当然你要是不小心在某个库里装了也没关系,不会有冲突。
三、具体操作步骤
1. 搭建自定义模块的基础结构
先创建一个叫custom_database_select的模块,目录结构如下:
custom_database_select/ ├── __init__.py # 空文件即可 ├── __manifest__.py # 模块配置文件 ├── views/ │ └── database_manage_custom.xml # 自定义模板文件 └── static/ └── src/ └── scss/ └── database_custom.scss # 美化用的样式文件
2. 编写模块配置文件__manifest__.py
这里要声明模块的依赖、要加载的模板和样式:
{ 'name': '自定义数据库选择页面', 'version': '11.0.1.0.0', 'author': '你的名字', 'category': 'Web', 'depends': ['web'], # 依赖核心web模块 'data': [ 'views/database_manage_custom.xml', ], 'qweb': [ 'views/database_manage_custom.xml', # 告诉Odoo加载我们的自定义模板 ], 'assets': { 'web.assets_frontend': [ 'custom_database_select/static/src/scss/database_custom.scss', # 加载自定义样式 ], }, 'installable': True, 'auto_install': False, }
3. 重写数据库选择页面的模板
在views/database_manage_custom.xml里,我们通过继承原模板来修改内容,这样不会破坏原有功能:
<odoo> <!-- 先继承原模板做自定义修改 --> <template id="database_manage_custom" inherit_id="web.database_manage" name="自定义数据库管理页面"> <!-- 替换默认的页面标题 --> <xpath expr="//h1" position="replace"> <h1 class="custom-title">欢迎选择您的业务数据库</h1> </xpath> <!-- 给数据库列表容器加自定义类,方便美化 --> <xpath expr="//div[@class='oe_database_list']" position="attributes"> <attribute name="class">oe_database_list custom-db-list</attribute> </xpath> <!-- 可以加自定义内容,比如底部的版权提示 --> <xpath expr="//div[@class='oe_footer']" position="after"> <div class="custom-footer"> <p>由你的团队定制 © 2024</p> </div> </xpath> </template> <!-- 替换原模板的引用,让Odoo优先加载我们的自定义模板 --> <template id="web.database_manage" inherit_id="web.database_manage" name="覆盖默认数据库页面"> <t position="replace"> <t t-call="custom_database_select.database_manage_custom"/> </t> </template> </odoo>
这里用XPath定位原模板里的元素,然后做替换、添加属性或者插入新内容,非常灵活。
4. 写美化样式
在static/src/scss/database_custom.scss里写你想要的样式,比如把数据库列表改成卡片式布局,加hover效果:
/* 自定义标题样式 */ .custom-title { color: #2c3e50; font-size: 2.5rem; margin-bottom: 2rem; text-align: center; } /* 数据库列表改成网格布局 */ .custom-db-list { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 1.5rem; margin-top: 2rem; } /* 数据库卡片美化 */ .custom-db-list .oe_database { background: #ffffff; border-radius: 8px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); padding: 1.5rem; transition: transform 0.3s ease; } .custom-db-list .oe_database:hover { transform: translateY(-5px); box-shadow: 0 4px 15px rgba(0,0,0,0.15); } /* 自定义页脚样式 */ .custom-footer { text-align: center; margin-top: 3rem; color: #7f8c8d; font-size: 0.9rem; }
5. 让模块生效
- 把这个模块放到Odoo的
addons目录下,或者在odoo.conf里通过addons_path参数指定模块所在的文件夹路径。 - 重启Odoo服务,这样Odoo就能加载到这个模块了。
四、验证效果
重启后访问数据库选择页面(比如http://localhost:8069/web/database/manager),就能看到修改后的标题、卡片式的数据库列表和自定义页脚了!
如果还想加交互功能(比如点击数据库卡片的动画),可以在模块里加JS文件,然后在__manifest__.py的web.assets_frontend里引入就行,方法和加CSS一样。
内容的提问来源于stack exchange,提问作者Ankit

