在odoo数据模板中调用qweb模板

Call qweb template inside odoo data template

我正在尝试为登录和注册创建一个 OTP 服务。所以我为 otp 服务制作了一个工作正常的模块。但是这里对于 UI,我制作了一个模板,应该在登录页面内调用该模板以显示 otp 框和 otp 发送按钮。请参阅下面的示例代码:

<templates xml:space="preserve">
    <div name="otp_service" t-name="bulk_sms_otp_service.otp_service">
        <h1>Hello world</h1>
    </div>
</templates>

现在我正尝试在登录视图中调用此模板。请看下面:

<odoo>
  <template id="custom_login" name="Custom login" inherit_id="web.login">
    <xpath expr="//p[hasclass('alert-success')]" position="after">
        <t t-call="bulk_sms_otp_service.otp_service"/>
    </xpath>
  </template>
</odoo>

但是这个调用不起作用。给我这样的错误:

External id "bulk_sms_otp_service.otp_service" not found

我不知道我的代码有什么问题或者我错了。请帮我解决这个问题。

您可以在 Helpers 阅读:

in which case templates stored in the database (as views)

可以推导出一些qweb模板没有存入数据库

您还可以在 JS QWeb Template Engine 文档中了解到,每个模块清单中的 qweb 条目中列出的文件中定义的模板会在 Web 客户端启动时加载。

当 odoo 处理 custom_login 模板时,它会尝试检索 bulk_sms_otp_service.otp_service 模板 view_id(从 ir.model.data)到 read 相应的模板和它将失败,因为 custom_login 模板未存储在数据库中(在 ir.ui.view 中)。