
本文详解如何绕过 Odoo 默认的后台管理界面(如列表页、搜索栏、创建按钮等),通过继承 web.layout 或构建独立主题模块,实现一个仅含自定义 HTML 内容的轻量级静态网站页面。
本文详解如何绕过 odoo 默认的后台管理界面(如列表页、搜索栏、创建按钮等),通过继承 `web.layout` 或构建独立主题模块,实现一个仅含自定义 html 内容的轻量级静态网站页面。
在 Odoo 中,默认的 ir.actions.act_window(如你定义的 debit_card_action)始终导向后台管理视图(tree/form),附带完整的 Web Client UI(顶部菜单、侧边栏、搜索框、批量操作等)。若你只需一个干净、无干扰的前端页面(例如展示“Hello World!”和一个生成序列号的按钮),不应使用模型动作(act_window)或表单视图,而应转向 Odoo 的 Website 模块机制——它专为面向用户的前端页面设计。
✅ 正确路径:使用 Website 模块 + 自定义模板
首先确保已安装 website 应用(在 Apps 中搜索并安装)。随后,在你的自定义模块中添加以下结构:
1. 在 views/website_templates.xml 中定义纯前端页面
<?xml version="1.0" encoding="utf-8"?><odoo><!-- 继承基础布局,替换 body 内容 --><template id="debit_card_landing_page" name="Debit Card Landing Page" inherit_id="website.layout"><xpath expr="//main" position="replace"><main class="s_fullheight bg-white"><div class="container pt-5 pb-5 text-center">
<h1 class="mb-4">Heinzmann Debit Card</h1>
<p class="lead mb-4">Welcome to your personalized card portal.</p>
<button type="button" class="btn btn-primary btn-lg js-generate-seq">
Generate Sequence Number
</button>
<div id="seq-result" class="mt-3 text-success fw-bold"></div>
</div>
</main></xpath></template><!-- 可选:添加 JS 行为(需配合 static/src/js/ 目录) --><template id="assets_frontend" name="Debit Card Assets" inherit_id="website.assets_frontend"><xpath expr="." position="inside"><script type="text/javascript" src="/your_module_name/static/src/js/debit_card.js"></script></xpath></template></odoo>
2. 添加前端交互逻辑(static/src/js/debit_card.js)
odoo.define('your_module_name.debit_card', function (require) {
'use strict';
$(document).ready(function () {
$('.js-generate-seq').on('click', function () {
const $btn = $(this);
const $result = $('#seq-result');
$btn.prop('disabled', true).text('Generating...');
// 调用后端方法(推荐使用 /jsonrpc 或 controller)
$.post('/debit_card/generate_seq', {}, function (data) {
$result.text('Sequence: ' + data.sequence);
}).fail(function () {
$result.addClass('text-danger').text('Failed to generate.');
}).always(function () {
$btn.prop('disabled', false).text('Generate Sequence Number');
});
});
});
});
3. 创建控制器处理请求(controllers/main.py)
from odoo import http
from odoo.http import request
import json
class DebitCardController(http.Controller):
@http.route('/debit_card/generate_seq', type='json', auth='public', methods=['POST'], csrf=False)
def generate_sequence(self):
# 示例:使用 Odoo 序列
seq = request.env['ir.sequence'].next_by_code('debit.card.seq') or 'SEQ-0001'
return {'sequence': seq}
4. 声明序列(data/sequence_data.xml)
<record id="seq_debit_card" model="ir.sequence"><field name="name">Debit Card Sequence</field><field name="code">debit.card.seq</field><field name="prefix">DC-</field><field name="padding">4</field><field name="number_next">1</field></record>
5. 更新 __manifest__.py
{
'name': 'Debit Card Website',
'category': 'Website',
'version': '0.1',
'depends': ['base', 'website'],
'data': [
'data/sequence_data.xml',
'views/website_templates.xml',
'views/debit_card_menu_items.xml', # 可选:仅用于后台入口,非必需
],
'assets': {
'website.assets_frontend': [
'your_module_name/static/src/js/debit_card.js',
],
},
'installable': True,
'application': False,
}
⚠️ 关键注意事项:
- 删除原
debit_card_view.xml和debit_card_actions.xml—— 它们属于后台逻辑,与纯前端网站冲突;- 页面 URL 由路由或网站菜单控制:发布后可通过
/page/your_module_name.debit_card_landing_page访问;- 若需 SEO 友好 URL,可在 Website 后台 → Website → Pages 中将该模板设为首页或配置自定义 URL;
- 所有前端资源(JS/CSS)必须通过
assets_frontend注入,不可直接<script></script>写在模板内(Odoo 会忽略);auth='public'允许未登录用户访问;如需登录限制,改为auth='user'并确保用户有对应权限。
通过以上方式,你将获得一个真正“无默认视图”的轻量网站页面:零后台组件、零表格、零搜索栏,只有你定义的 HTML、CSS 和交互逻辑——这才是 Odoo 中构建品牌落地页、活动页或信息门户的正确实践。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











