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

Odoo 10e实现按钮跳转自定义感谢HTML页面技术咨询

在Odoo 10中实现点击按钮跳转至自定义感谢页面(无法重复提交)

嘿,我来帮你搞定这个需求!在Odoo 10里实现点击按钮跳转到自定义感谢页面,还要像谷歌问卷那样防止重复提交,其实分几步就能搞定,我给你详细拆解一下:

1. 创建自定义感谢页面的QWeb模板

首先你需要在你的模块里定义一个感谢页面的HTML模板,用Odoo的QWeb语法来写,这样页面会自动套用你当前网站的布局,风格统一。

在你的模块下创建views/templates.xml文件(如果没有的话),添加以下代码:

<odoo>
    <!-- 定义感谢页面模板 -->
    <template id="thank_you_page" name="Thank You Page">
        <t t-call="website.layout">
            <div class="container mt-5">
                <div class="jumbotron text-center">
                    <h1 class="display-4">🎉 感谢您的提交!</h1>
                    <p class="lead">您的信息已成功记录,我们会在24小时内与您取得联系。</p>
                    <hr class="my-4">
                    <p>如果您有其他需求,可以随时访问我们的首页或联系客服。</p>
                    <a class="btn btn-primary btn-lg" href="/" role="button">返回首页</a>
                </div>
            </div>
        </t>
    </template>

    <!-- 注册页面路由,让用户能通过URL访问 -->
    <record id="thank_you_route" model="ir.ui.view">
        <field name="name">Thank You Page Route</field>
        <field name="model">ir.ui.view</field>
        <field name="arch" type="xml">
            <odoo>
                <route path="/thank-you" type="http" auth="public">
                    <template>your_module.thank_you_page</template>
                </route>
            </odoo>
        </field>
    </record>
</odoo>

注意把your_module替换成你实际的模块名称,这样路由才能正确找到模板。auth="public"确保未登录用户也能访问这个页面。

2. 编写按钮的提交与跳转逻辑

接下来要给按钮绑定方法,先处理提交逻辑(比如保存状态、标记已提交),然后跳转到刚才创建的感谢页面。

在你的模型文件(比如models/your_model.py)里添加以下代码:

from odoo import models, api

class YourModel(models.Model):
    _inherit = 'your.model'  # 替换成你实际要扩展的模型,比如'crm.lead'

    @api.multi
    def action_submit_and_redirect(self):
        # 第一步:处理提交逻辑,比如标记记录为已提交
        # 假设你的模型有一个state字段,用来控制状态
        self.write({'state': 'submitted'})

        # 第二步:跳转到自定义感谢页面
        return {
            'type': 'ir.actions.act_url',
            'url': '/thank-you',
            'target': 'self'
        }

如果你的模型还没有state字段,记得先添加这个字段(可以通过模型继承或者直接修改模型),用来区分已提交和未提交的记录。

3. 防止重复提交的处理

要实现类似谷歌问卷的“无法返回再次提交”效果,我们需要在提交页面做两个限制:

  • 已提交的记录,隐藏提交按钮
  • 如果用户通过浏览器返回按钮回到提交页面,提示已提交并引导到感谢页面

在你的表单视图文件(比如views/your_view.xml)里修改:

<odoo>
    <record id="your_model_form_view" model="ir.ui.view">
        <field name="name">Your Model Form View</field>
        <field name="model">your.model</field>
        <field name="inherit_id" ref="base.your_model_form"/>  # 替换成实际的父视图ID
        <field name="arch" type="xml">
            <!-- 添加提交按钮,只有状态不是已提交时显示 -->
            <button 
                name="action_submit_and_redirect" 
                string="提交表单" 
                type="object" 
                class="btn-primary" 
                attrs="{'invisible': [('state', '=', 'submitted')]}"
            />

            <!-- 当状态为已提交时,显示提示信息 -->
            <div 
                attrs="{'invisible': [('state', '!=', 'submitted')]}" 
                class="alert alert-success mt-3"
            >
                <strong>温馨提示:</strong>您已成功提交该表单,无法重复提交。<a href="/thank-you" class="alert-link">点击查看感谢页面</a>
            </div>
        </field>
    </record>
</odoo>

最后一步:更新模块并测试

做完以上操作后,记得升级你的模块,然后测试流程:

  1. 打开记录,点击提交按钮,会自动跳转到感谢页面
  2. 点击浏览器返回按钮,回到提交页面后,会看到已提交的提示,提交按钮也会隐藏
  3. 直接访问感谢页面的URL /thank-you,也能正常打开

这样就完全实现了你想要的效果啦!

内容的提问来源于stack exchange,提问作者Ahsan Attari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:09:49