summaryrefslogtreecommitdiff
path: root/addons/web
diff options
context:
space:
mode:
authorLucas Perais (lpe) <lpe@odoo.com>2020-01-30 08:41:08 +0000
committerLucas Perais (lpe) <lpe@odoo.com>2020-01-30 12:22:23 +0000
commitcfac7b37752d6810272d2b9bb8909add4ca3aaa7 (patch)
tree2225397213796f2ba799336155061c3845841520 /addons/web
parent1d872f24b153e3342886f0fd6d85b61341f63953 (diff)
[FIX] web: template inheritance from dotted name
A good practice is to always prefix the name of a template by the name of the module it is defined in. So in the case where a template ```xml <t t-name="module.template" /> ``` was inherited by another Before this commit, one should have written ```xml <t t-name="other" t-inherit="module.module.template" /> ``` After this commit, it becomes more natural, and one should only write ```xml <t t-name="other" t-inherit="module.template"/> ```
Diffstat (limited to 'addons/web')
-rw-r--r--addons/web/controllers/main.py3
-rw-r--r--addons/web/tests/test_serving_base.py191
2 files changed, 194 insertions, 0 deletions
diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py
index bf4e2aaa0fc..798077daf40 100644
--- a/addons/web/controllers/main.py
+++ b/addons/web/controllers/main.py
@@ -496,6 +496,9 @@ class HomeStaticTemplateHelpers(object):
for template_tree in list(all_templates_tree):
if self.NAME_TEMPLATE_DIRECTIVE in template_tree.attrib:
template_name = template_tree.attrib[self.NAME_TEMPLATE_DIRECTIVE]
+ dotted_names = template_name.split('.', 1)
+ if len(dotted_names) > 1 and dotted_names[0] == addon:
+ template_name = dotted_names[1]
else:
# self.template_dict[addon] grows after processing each template
template_name = 'anonymous_template_%s' % len(self.template_dict[addon])
diff --git a/addons/web/tests/test_serving_base.py b/addons/web/tests/test_serving_base.py
index c6ac2083dbb..09c52df3471 100644
--- a/addons/web/tests/test_serving_base.py
+++ b/addons/web/tests/test_serving_base.py
@@ -716,6 +716,197 @@ class TestStaticInheritance(TestStaticInheritanceCommon):
self.assertXMLEqual(contents, expected)
+ def test_inherit_from_dotted_tname_1(self):
+ self.modules = [
+ ('module_1_file_1', None, 'module_1'),
+ ]
+ self.template_files = {
+ 'module_1_file_1': b"""
+ <templates id="template" xml:space="preserve">
+ <form t-name="module_1.template_1_1.dot" random-attr="gloria">
+ <div>At first I was afraid</div>
+ </form>
+ <t t-name="template_1_2" t-inherit="template_1_1.dot" t-inherit-mode="primary">
+ <xpath expr="." position="replace">
+ <div overriden-attr="overriden">
+ And I grew strong
+ <p>And I learned how to get along</p>
+ </div>
+ </xpath>
+ </t>
+ </templates>
+ """,
+ }
+
+ contents = HomeStaticTemplateHelpers.get_qweb_templates(addons=self._get_module_names(), debug=True)
+ expected = b"""
+ <templates>
+ <form t-name="module_1.template_1_1.dot" random-attr="gloria">
+ <div>At first I was afraid</div>
+ </form>
+ <div overriden-attr="overriden" t-name="template_1_2">
+ And I grew strong
+ <p>And I learned how to get along</p>
+ </div>
+ </templates>
+ """
+
+ self.assertXMLEqual(contents, expected)
+
+ def test_inherit_from_dotted_tname_2(self):
+ self.modules = [
+ ('module_1_file_1', None, 'module_1'),
+ ]
+ self.template_files = {
+ 'module_1_file_1': b"""
+ <templates id="template" xml:space="preserve">
+ <form t-name="template_1_1.dot" random-attr="gloria">
+ <div>At first I was afraid</div>
+ </form>
+ <t t-name="template_1_2" t-inherit="template_1_1.dot" t-inherit-mode="primary">
+ <xpath expr="." position="replace">
+ <div overriden-attr="overriden">
+ And I grew strong
+ <p>And I learned how to get along</p>
+ </div>
+ </xpath>
+ </t>
+ </templates>
+ """,
+ }
+
+ contents = HomeStaticTemplateHelpers.get_qweb_templates(addons=self._get_module_names(), debug=True)
+ expected = b"""
+ <templates>
+ <form t-name="template_1_1.dot" random-attr="gloria">
+ <div>At first I was afraid</div>
+ </form>
+ <div overriden-attr="overriden" t-name="template_1_2">
+ And I grew strong
+ <p>And I learned how to get along</p>
+ </div>
+ </templates>
+ """
+
+ self.assertXMLEqual(contents, expected)
+
+ def test_inherit_from_dotted_tname_2bis(self):
+ self.modules = [
+ ('module_1_file_1', None, 'module_1'),
+ ]
+ self.template_files = {
+ 'module_1_file_1': b"""
+ <templates id="template" xml:space="preserve">
+ <form t-name="template_1_1.dot" random-attr="gloria">
+ <div>At first I was afraid</div>
+ </form>
+ <t t-name="template_1_2" t-inherit="module_1.template_1_1.dot" t-inherit-mode="primary">
+ <xpath expr="." position="replace">
+ <div overriden-attr="overriden">
+ And I grew strong
+ <p>And I learned how to get along</p>
+ </div>
+ </xpath>
+ </t>
+ </templates>
+ """,
+ }
+
+ contents = HomeStaticTemplateHelpers.get_qweb_templates(addons=self._get_module_names(), debug=True)
+ expected = b"""
+ <templates>
+ <form t-name="template_1_1.dot" random-attr="gloria">
+ <div>At first I was afraid</div>
+ </form>
+ <div overriden-attr="overriden" t-name="template_1_2">
+ And I grew strong
+ <p>And I learned how to get along</p>
+ </div>
+ </templates>
+ """
+
+ self.assertXMLEqual(contents, expected)
+
+ def test_inherit_from_dotted_tname_2ter(self):
+ self.modules = [
+ ('module_1_file_1', None, 'module_1'),
+ ]
+ self.template_files = {
+ 'module_1_file_1': b"""
+ <templates id="template" xml:space="preserve">
+ <form t-name="module_1" random-attr="gloria">
+ <div>At first I was afraid</div>
+ </form>
+ <t t-name="template_1_2" t-inherit="module_1" t-inherit-mode="primary">
+ <xpath expr="." position="replace">
+ <div overriden-attr="overriden">
+ And I grew strong
+ <p>And I learned how to get along</p>
+ </div>
+ </xpath>
+ </t>
+ </templates>
+ """,
+ }
+
+ contents = HomeStaticTemplateHelpers.get_qweb_templates(addons=self._get_module_names(), debug=True)
+ expected = b"""
+ <templates>
+ <form t-name="module_1" random-attr="gloria">
+ <div>At first I was afraid</div>
+ </form>
+ <div overriden-attr="overriden" t-name="template_1_2">
+ And I grew strong
+ <p>And I learned how to get along</p>
+ </div>
+ </templates>
+ """
+
+ self.assertXMLEqual(contents, expected)
+
+ def test_inherit_from_dotted_tname_3(self):
+ self.modules = [
+ ('module_1_file_1', None, 'module_1'),
+ ('module_2_file_1', None, 'module_2'),
+ ]
+ self.template_files = {
+ 'module_1_file_1': b"""
+ <templates id="template" xml:space="preserve">
+ <form t-name="module_1.template_1_1.dot" random-attr="gloria">
+ <div>At first I was afraid</div>
+ </form>
+ </templates>
+ """,
+
+ 'module_2_file_1': b"""
+ <templates id="template" xml:space="preserve">
+ <t t-name="template_2_1" t-inherit="module_1.template_1_1.dot" t-inherit-mode="primary">
+ <xpath expr="." position="replace">
+ <div overriden-attr="overriden">
+ And I grew strong
+ <p>And I learned how to get along</p>
+ </div>
+ </xpath>
+ </t>
+ </templates>
+ """
+ }
+
+ contents = HomeStaticTemplateHelpers.get_qweb_templates(addons=self._get_module_names(), debug=True)
+ expected = b"""
+ <templates>
+ <form t-name="module_1.template_1_1.dot" random-attr="gloria">
+ <div>At first I was afraid</div>
+ </form>
+ <div overriden-attr="overriden" t-name="template_2_1">
+ And I grew strong
+ <p>And I learned how to get along</p>
+ </div>
+ </templates>
+ """
+
+ self.assertXMLEqual(contents, expected)
+
@tagged('-standard', 'static_templates_performance')
class TestStaticInheritancePerformance(TestStaticInheritanceCommon):