Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions common/djangoapps/edxmako/paths.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,11 @@ def get_template(self, uri):
try:
# Try to find themed template, i.e. see if current theme overrides the template
template = super(DynamicTemplateLookup, self).get_template(get_template_path_with_theme(uri))
# For an overriding template, the uri is the path to the same template, so the lookup always
# finds the same overriding template. If that's the case, route to exception so that the
# uri can be stripped of the path and the parent template can be found.
if template == super(DynamicTemplateLookup, self).get_template(uri):
raise TopLevelLookupException()
except TopLevelLookupException:
# strip off the prefix path to theme and look in default template dirs
template = super(DynamicTemplateLookup, self).get_template(strip_site_theme_templates_path(uri))
Expand Down
4 changes: 4 additions & 0 deletions common/test/test-theme/lms/templates/dashboard.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<%inherit file="dashboard.html" />
<%block name="pagetitle">Overridden Title!</%block>
${parent.body()}
<%block name="bodyextra">Overriden Body Extra!</%block>
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,30 @@ def test_logo_image(self):
result = staticfiles.finders.find('test-theme/images/logo.png')
self.assertEqual(result, settings.TEST_THEME / 'lms/static/images/logo.png')

@with_comprehensive_theme("test-theme")
def test_override_block_in_parent(self):
"""
Test that theme title is used instead of parent title.
"""
self._login()
dashboard_url = reverse('dashboard')
resp = self.client.get(dashboard_url)
self.assertEqual(resp.status_code, 200)
# This string comes from the 'pagetitle' block of the overriding theme.
self.assertContains(resp, "Overridden Title!")

@with_comprehensive_theme("test-theme")
def test_override_block_in_grandparent(self):
"""
Test that theme title is used instead of parent's parent's title.
"""
self._login()
dashboard_url = reverse('dashboard')
resp = self.client.get(dashboard_url)
self.assertEqual(resp.status_code, 200)
# This string comes from the 'bodyextra' block of the overriding theme.
self.assertContains(resp, "Overriden Body Extra!")


@skip_unless_cms
class TestComprehensiveThemeCMS(TestCase):
Expand Down