能否在表单视图等常规视图中使用Qweb模板?调试无效果求助
问题解答
你不能直接在表单视图的<page>标签内嵌套<template>标签来使用QWeb,这是因为<template>是用来定义独立可复用QWeb模板的根标签,表单视图的XML解析器不会处理这种嵌套结构,所以你的代码会被直接忽略,看起来就像不存在一样。
正确的两种实现方式:
方式1:直接在表单视图中使用QWeb指令(无需独立模板)
去掉外层的<template>标签,直接在<page>内使用QWeb的t-*指令:
<page string="test"> <t t-esc="'Logging!'"/> <!-- t-log的内容会输出到浏览器控制台,不是页面上 --> <t t-log="'Logging!'"/> <t t-raw="'Logging'"/> </page>
注意:字符串需要用单引号包裹(比如'Logging!'),否则会被当作变量解析,若变量不存在则无输出。
方式2:定义独立QWeb模板后调用
如果需要复用这段模板内容,可以先单独定义QWeb模板:
<!-- 在模块的XML文件中定义模板(比如views/templates.xml) --> <template id="test_log_template"> <t t-esc="'Logging!'"/> <t t-log="'Logging!'"/> <t t-raw="'Logging'"/> </template>
然后在表单视图的<page>中通过t-call调用该模板(替换your_module_name为你的模块名):
<page string="test"> <t t-call="your_module_name.test_log_template"/> </page>
额外注意事项:
- 修改完成后必须升级模块,确保XML视图和QWeb模板被重新加载
t-log的输出不会显示在页面上,需要打开浏览器开发者工具(F12)的控制台查看- 若使用变量而非固定字符串,确保变量在当前表单视图的上下文环境中存在
内容的提问来源于stack exchange,提问作者Ehab
相关产品推荐
相关产品推荐

