Odoo主题模板修改:XPath无法定位父视图元素求助
Odoo主题模板XPath定位as-pc-title元素失败解决方案
原始视图参考(基于常见场景)
<template id="original_pc_title_template" name="PC Title Template"> <div class="as-pc-wrapper"> <h1 t-attf-class="as-pc-title #{title_style}">Default PC Title</h1> </div> </template>
常见错误写法及报错
错误写法1:直接匹配自定义标签(实际是class)
<xpath expr="//as-pc-title" position="replace"> <h1 class="as-pc-title">New Title</h1> </xpath>
报错:
Element '<xpath expr="//as-pc-title">' cannot be located in parent view
错误写法2:精确匹配class(忽略动态class拼接)
<xpath expr="//*[@class='as-pc-title']" position="replace"> <h1 class="as-pc-title">New Title</h1> </xpath>
报错:
Element '<xpath expr="//*[@class='as-pc-title']">' cannot be located in parent view
正确XPath表达式及适配场景
场景1:元素是带动态class的普通标签
由于Odoo模板常用t-attf-class动态拼接class,必须用contains结合空格包裹来精准匹配目标class:
<template id="custom_pc_title" inherit_id="original_module.original_pc_title_template"> <xpath expr="//*[contains(concat(' ', normalize-space(@class), ' '), ' as-pc-title ')]" position="replace"> <h2 class="as-pc-title custom-style">Custom PC Title</h2> </xpath> </template>
场景2:元素是自定义<as-pc-title>标签
若目标是自定义标签,需限定父容器避免全局匹配,同时确保继承视图的inherit_id指向正确的原始模板:
<template id="custom_pc_title" inherit_id="original_module.original_pc_title_template"> <xpath expr="//div[contains(@class, 'as-pc-wrapper')]/as-pc-title" position="replace"> <as-pc-title class="custom-title">Custom PC Title</as-pc-title> </xpath> </template>
场景3:元素在动态渲染块内(如t-if/t-foreach)
需先定位到动态块的父元素,再嵌套匹配目标class:
<xpath expr="//div[@id='dynamic-content-wrapper']//*[contains(concat(' ', normalize-space(@class), ' '), ' as-pc-title ')]" position="replace"> <h1 class="as-pc-title dynamic-title">Dynamic Custom Title</h1> </xpath>
关键注意事项
- 确认继承视图的
inherit_id完全匹配原始模板的XML ID,包括模块前缀 - 若原始视图有多层嵌套,XPath路径需逐步精准定位,避免跨层级的全局匹配
内容的提问来源于stack exchange,提问作者Mahdi
相关产品推荐
相关产品推荐

