
本文教你绕过 odoo 默认后台视图(如列表页、搜索栏、创建按钮等),通过 website 模块 + qweb 模板快速构建一个仅含自定义内容(如“hello world!”和序列号生成按钮)的轻量级前端页面,不依赖任何模型记录或后台管理界面。
本文教你绕过 odoo 默认后台视图(如列表页、搜索栏、创建按钮等),通过 website 模块 + qweb 模板快速构建一个仅含自定义内容(如“hello world!”和序列号生成按钮)的轻量级前端页面,不依赖任何模型记录或后台管理界面。
Odoo 的默认 ir.actions.act_window(如你定义的 debit_card_action)始终导向后台管理界面(带有菜单栏、搜索框、列表/表单视图等),这正是你看到“默认 Odoo 页面”的根本原因。若目标是纯粹的前端展示页(类似静态官网首页),必须脱离后台动作体系,转而使用 Odoo 的 Website 模块机制——它专为面向用户的无权限、无 CRUD 的页面设计。
✅ 正确路径:启用 Website 模块 → 创建独立 QWeb 模板 → 通过 URL 直接访问
首先确保已安装 website 模块(在 Apps 中搜索并安装)。随后,在你的自定义模块中新增模板文件(如 views/website_templates.xml),内容如下:
<?xml version="1.0" encoding="utf-8"?><odoo><template id="debit_card_landing_page" name="Debit Card Landing Page" page="True"><t t-call="website.layout"><t t-set="title">Kundenkarte</t><div class="oe_structure"></div>
<div class="container mt32 mb32">
<h1 class="text-center">Herzlich Willkommen!</h1>
<div class="text-center mt16">
<p>Hello World! Dies ist Ihre individuelle Kundenkarte.</p>
<!-- 按钮:调用后端方法生成序列号 -->
<button type="button" class="btn btn-primary mt16" t-att-data-url="'/debit_card/generate_sequence'">
Sequenznummer generieren
</button>
<div id="sequence-result" class="mt16 text-success"></div>
</div>
</div>
<div class="oe_structure"></div>
</t></template></odoo>
⚠️ 关键说明:
-
page="True"表示该模板可作为独立网页访问(自动注册路由); -
t-call="website.layout"复用 Odoo 官方网站基础布局(含响应式头部/底部),如需完全空白页,可改用t-call="web.layout"并精简其内容; - 按钮未直接绑定 JS,而是预留
data-url属性,后续需在控制器中实现/debit_card/generate_sequence接口(返回 JSON 序列号)并配合简单 AJAX 调用。
? 后端控制器示例(controllers/main.py):
from odoo import http
from odoo.http import request
import json
class DebitCardController(http.Controller):
@http.route('/debit_card/generate_sequence', type='json', auth='public', methods=['POST'])
def generate_sequence(self):
# 示例:生成简单递增序列(生产环境请使用 ir.sequence)
seq = request.env['ir.sequence'].next_by_code('debit.card.seq') or 'DC-0001'
return {'sequence': seq}
并在 __manifest__.py 中添加:
'data': [
# ... 其他 XML
'views/website_templates.xml',
],
'depends': ['base', 'website'], # 必须显式依赖 website
? 注意事项:
- 不要将
TransientModel(如debit.card)用于前端页面逻辑——它本质是向导模型,不适合持久化或公开访问; - 所有前端模板需放入
views/目录,并在 manifest 中声明; - 若需完全去除 Odoo 默认样式与结构,可继承
web.layout后清空内容,但需自行处理 SEO、移动端适配等; - 生产中生成序列号务必使用
ir.sequence(需提前在data/中定义 XML 记录),而非内存计数器。
最终,访问 https://yourdomain.com/debit_card_landing_page 即可看到干净、无干扰的定制页面——这才是 Odoo 中构建“简单网站”的标准实践。










