diff --git a/addons/web_editor/static/src/js/wysiwyg/plugin/font.js b/addons/web_editor/static/src/js/wysiwyg/plugin/font.js index 91ac93470ba..c52712d7a02 100644 --- a/addons/web_editor/static/src/js/wysiwyg/plugin/font.js +++ b/addons/web_editor/static/src/js/wysiwyg/plugin/font.js @@ -549,6 +549,9 @@ registry.addJob(function (wysiwyg) { context: options.context, }, }).then(function (template) { + if (!/^/.test(template)) { + template = _.str.sprintf('%s', template); + } QWeb.add_template(template); }); }); diff --git a/addons/website/static/src/js/widgets/theme.js b/addons/website/static/src/js/widgets/theme.js index 7a3ef777232..de771132784 100644 --- a/addons/website/static/src/js/widgets/theme.js +++ b/addons/website/static/src/js/widgets/theme.js @@ -45,6 +45,9 @@ var ThemeCustomizeDialog = Dialog.extend({ method: 'read_template', args: ['website.theme_customize'], }).then(function (data) { + if (!/^/.test(data)) { + data = _.str.sprintf('%s', data); + } return core.qweb.add_template(data); }); } diff --git a/odoo/addons/base/models/ir_qweb.py b/odoo/addons/base/models/ir_qweb.py index 2e4070d2665..03bb225a655 100644 --- a/odoo/addons/base/models/ir_qweb.py +++ b/odoo/addons/base/models/ir_qweb.py @@ -129,11 +129,11 @@ class IrQWeb(models.AbstractModel, QWeb): return view.inherit_id is not None if isinstance(name, int) or is_child_view(name): - for node in etree.fromstring(template): + view = etree.fromstring(template) + for node in view: if node.get('t-name'): node.set('t-name', str(name)) - return node.getparent() - return None # trigger "template not found" in QWeb + return view else: return template diff --git a/odoo/addons/base/models/ir_ui_view.py b/odoo/addons/base/models/ir_ui_view.py index d8a15f000d9..f07a045c4a5 100644 --- a/odoo/addons/base/models/ir_ui_view.py +++ b/odoo/addons/base/models/ir_ui_view.py @@ -1161,8 +1161,7 @@ actual arch. arch = self.browse(view_id).read_combined(['arch'])['arch'] arch_tree = etree.fromstring(arch) self.distribute_branding(arch_tree) - root = E.templates(arch_tree) - arch = etree.tostring(root, encoding='unicode') + arch = etree.tostring(arch_tree, encoding='unicode') return arch @api.model diff --git a/odoo/addons/base/models/qweb.py b/odoo/addons/base/models/qweb.py index d8b1a3cdde2..fa1b20e147f 100644 --- a/odoo/addons/base/models/qweb.py +++ b/odoo/addons/base/models/qweb.py @@ -358,20 +358,21 @@ class QWeb(object): except Exception as e: raise QWebException("load could not load template", name=template) - if document is not None: - if isinstance(document, etree._Element): - element = document - document = etree.tostring(document) - elif not document.strip().startswith('<') and os.path.exists(document): - element = etree.parse(document).getroot() - else: - element = etree.fromstring(document) + if document is None: + raise QWebException("Template not found", name=template) - for node in element: - if node.get('t-name') == str(template): - return (node, document) + if isinstance(document, etree._Element): + element = document + document = etree.tostring(document) + elif not document.strip().startswith('<') and os.path.exists(document): + element = etree.parse(document).getroot() + else: + element = etree.fromstring(document) - raise QWebException("Template not found", name=template) + for node in element: + if node.get('t-name') == str(template): + return (node, document) + return (element, document) def load(self, template, options): """ Load a given template. """