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

Odoo14继承slide.slide.quiz.validation模板修改按钮文本失效求助

问题:Odoo 14修改eLearning测验按钮标签无生效

我在Odoo 14的website_slides模块中尝试继承slide.slide.quiz.validation模板,将测验页面的"Reset"按钮标签改为"Retake"。升级自定义模块和website_slides模块后无报错,但页面完全没有变化。


自定义模块代码

1. JS文件(路径:custom_module > static > src > js > custom_js.js)

odoo.define('custom_module.quiz', function (require) {
    "use strict";
    
    var Quiz = require('website_slides.quiz').Quiz;
    
    
    Quiz.include({
        xmlDependencies: (Quiz.prototype.xmlDependencies || []).concat(
            ["/custom_module/static/src/xml/slide_quiz.xml"]
        )
    });
});

2. XML模板文件(路径:custom_module > static > src > xml> custom_template.xml)

<?xml version="1.0" encoding="utf-8" ?>

<templates xml:space="preserve">
    <t t-extend="slide.slide.quiz.validation">
        <t t-jquery=".o_wslides_js_lesson_quiz_reset" t-operation="replace">
            <button  class="btn btn-light border o_wslides_js_lesson_quiz_reset">
                Retake
            </button>
        </t>
    </t>
</templates>

3. 资产文件(路径:custom_module > views > assets.xml)

<?xml version="1.0" ?>
<odoo>
    <template id="elearning_assets" name="eLearning Assets" inherit_id="website.assets_frontend">
        <xpath expr="//link[last()]" position="after">
            <link rel="stylesheet" type="text/scss" href="/custom_module/static/src/scss/course.scss" />
        </xpath>
        <xpath expr="//script[last()]" position="after">
            <script type="text/javascript" src="/custom_module/static/src/js/slides_course_quiz.js"/>
        </xpath>
    </template>
</odoo>

注:assets.xml已添加到模块清单文件,同时已继承slide.channel模型。


website_slides原模板片段(路径:website_slides > static > src > xml > slide_quiz.xml)

<t t-name="slide.slide.quiz.validation">
        <div id="validation">
            # existing code
            <div t-else="" class="d-md-flex align-items-center justify-content-between">
                # existing code
                <div class="ml-auto mt-3 mt-md-0">
                    <button t-if="widget.quiz.quizAttemptsCount > 0 &amp;&amp; widget.slide.channelCanUpload" class="btn btn-light border o_wslides_js_lesson_quiz_reset">
                        Reset
                    </button>
                    <button t-if="widget.slide.completed &amp;&amp; widget.slide.hasNext" class="btn btn-primary o_wslides_quiz_continue">
                        Continue <i class="fa fa-chevron-right ml-1"/>
                    </button>
                </div>
            </div>
        </div>
    </t>

排查修复建议

  1. 修正JS文件路径不匹配:assets.xml中引用的JS文件是slides_course_quiz.js,但实际创建的是custom_js.js,需将assets.xml中的引用路径改为/custom_module/static/src/js/custom_js.js。
  2. 统一XML模板文件名:JS中声明的XML依赖路径是/custom_module/static/src/xml/slide_quiz.xml,但实际模板文件名为custom_template.xml,需将两者统一(要么修改JS中的路径,要么重命名模板文件)。
  3. 强制清除缓存:修改前端资源后,必须在Odoo后台执行开发者模式 > 清除缓存并重新加载,同时清空浏览器缓存,确保新资源被加载。
  4. 验证按钮渲染条件:确认当前页面满足按钮显示的t-if条件(widget.quiz.quizAttemptsCount > 0 && widget.slide.channelCanUpload),若条件不满足,按钮本身不会渲染,自然看不到修改效果。

内容的提问来源于stack exchange,提问作者Kai Ning

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 06:32:53