Skip to content

Commit

Permalink
Use Django's template loader for Django pages. (#692)
Browse files Browse the repository at this point in the history
* Drop custom template loader.

* Get Django pages using default template loader.

* Update resources templates test.

* flake8 fix
  • Loading branch information
nworden authored May 20, 2019
1 parent 347d3ae commit ef24cdd
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 104 deletions.
7 changes: 3 additions & 4 deletions app/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@
# Application definition

INSTALLED_APPS = [
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.staticfiles',
]

Expand Down Expand Up @@ -84,7 +86,7 @@
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'DIRS': ['resources'],
'OPTIONS': {
'context_processors': [
'django.contrib.auth.context_processors.auth',
Expand All @@ -95,9 +97,6 @@
'django.template.context_processors.tz',
'django.contrib.messages.context_processors.messages',
],
'loaders': [
'template_loader.TemplateLoader',
]
},
},
]
Expand Down
38 changes: 0 additions & 38 deletions app/template_loader.py

This file was deleted.

27 changes: 11 additions & 16 deletions app/views/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,13 @@
import re

import django.http
import django.shortcuts
import django.utils.decorators
import django.views
import six.moves.urllib.parse as urlparse

import config
import const
import resources
import site_settings
import user_agents
import utils
Expand Down Expand Up @@ -349,23 +349,18 @@ def render(self, template_name, status_code=200, **template_vars):
Returns:
HttpResponse: An HttpResponse with the rendered template.
"""

def get_vars():
"""A function returning vars, for use by the resources module."""
template_vars['env'] = self.env
template_name = '%s.template' % template_name
context = {
'env': self.env,
# TODO(nworden): change templates to access config through env,
# which already has the config anyway
template_vars['config'] = self.env.config
template_vars['params'] = self.params
template_vars['csp_nonce'] = self.request.csp_nonce
return template_vars

query_str = self.request.META.get('QUERY_STRING', '')
extra_key = (self.env.repo, self.env.charset, query_str)
return django.http.HttpResponse(
resources.get_rendered(template_name, self.env.lang, extra_key,
get_vars, 0),
status=status_code)
'config': self.env.config,
'params': self.params,
'csp_nonce': self.request.csp_nonce,
}
context.update(template_vars)
return django.shortcuts.render(
self.request, template_name, context, status=status_code)

def error(self, status_code, message=''):
"""Returns an error response.
Expand Down
73 changes: 27 additions & 46 deletions tests/test_resources.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,16 +66,12 @@ def setUp(self):
resources.set_active_bundle_name('1')

self.temp_entity_keys = []
self.put_resource('1', 'base.html.template', 50,
self.put_resource('1', 'test-base.html.template', 50,
'hi! {% block foo %}{% endblock foo %}')
self.put_resource('1', 'base.html.template:es', 40,
self.put_resource('1', 'test-base.html.template:es', 40,
'\xc2\xa1hola! {% block foo %}{% endblock foo %}')
self.put_resource('1', 'page.html.template', 30,
'{% extends "base.html.template" %} '
'{% block foo %}default{% endblock foo %}')
self.put_resource('1', 'page.html.template:fr', 20,
'{% extends "base.html.template" %} '
'{% block foo %}fran\xc3\xa7ais{% endblock foo %}')
self.put_resource('1', 'page.html.template', 30, 'default')
self.put_resource('1', 'page.html.template:fr', 20, 'fran\xc3\xa7ais')
self.put_resource('1', 'static.html', 30, 'hello')
self.put_resource('1', 'static.html:fr', 20, 'bonjour')
self.put_resource('1', 'data', 10, '\xff\xfe\xfd\xfc')
Expand Down Expand Up @@ -214,38 +210,26 @@ def test_get_rendered(self):
get_rendered = resources.get_rendered
eq = self.assertEquals

# There's no es-specific page but there is an es-specific base template.
self.fetched, self.compiled, self.rendered = [], [], []
assert get_rendered('page.html', 'es') == u'\xa1hola! default'
assert self.fetched == ['page.html:es', 'page.html',
'page.html.template:es', 'page.html.template',
'base.html.template:es']
assert self.compiled == ['page.html.template', 'base.html.template:es']
assert self.rendered == ['page.html.template']

# There's an fr-specific page but no fr-specific base template.
self.fetched, self.compiled, self.rendered = [], [], []
assert get_rendered('page.html', 'fr') == u'hi! fran\xe7ais'
assert self.fetched == ['page.html:fr', 'page.html',
'page.html.template:fr',
'base.html.template:fr', 'base.html.template']
assert self.compiled == ['page.html.template:fr', 'base.html.template']
assert get_rendered('page.html', 'fr') == u'fran\xe7ais'
assert self.fetched == [
'page.html:fr', 'page.html', 'page.html.template:fr']
assert self.compiled == ['page.html.template:fr']
assert self.rendered == ['page.html.template:fr']

# There's no en-specific page and no en-specific base template.
self.fetched, self.compiled, self.rendered = [], [], []
assert get_rendered('page.html', 'en') == u'hi! default'
assert get_rendered('page.html', 'en') == u'default'
assert self.fetched == ['page.html:en', 'page.html',
'page.html.template:en', 'page.html.template',
'base.html.template:en', 'base.html.template']
assert self.compiled == ['page.html.template', 'base.html.template']
'page.html.template:en', 'page.html.template']
assert self.compiled == ['page.html.template']
assert self.rendered == ['page.html.template']

# These should be cache hits, and shouldn't fetch, compile, or render.
self.fetched, self.compiled, self.rendered = [], [], []
assert get_rendered('page.html', 'es') == u'\xa1hola! default'
assert get_rendered('page.html', 'fr') == u'hi! fran\xe7ais'
assert get_rendered('page.html', 'en') == u'hi! default'
assert get_rendered('page.html', 'fr') == u'fran\xe7ais'
assert get_rendered('page.html', 'en') == u'default'
assert self.fetched == []
assert self.compiled == []
assert self.rendered == []
Expand All @@ -255,23 +239,23 @@ def test_get_rendered(self):

# Should fetch and recompile the pages but not the base templates.
self.fetched, self.compiled, self.rendered = [], [], []
assert get_rendered('page.html', 'es') == u'\xa1hola! default'
assert get_rendered('page.html', 'es') == u'default'
assert self.fetched == ['page.html:es', 'page.html',
'page.html.template:es', 'page.html.template']
assert self.compiled == ['page.html.template']
assert self.rendered == ['page.html.template']

# Should fetch and recompile the pages but not the base templates.
self.fetched, self.compiled, self.rendered = [], [], []
assert get_rendered('page.html', 'fr') == u'hi! fran\xe7ais'
assert get_rendered('page.html', 'fr') == u'fran\xe7ais'
assert self.fetched == ['page.html:fr', 'page.html',
'page.html.template:fr']
assert self.compiled == ['page.html.template:fr']
assert self.rendered == ['page.html.template:fr']

# Should fetch and recompile the pages but not the base templates.
self.fetched, self.compiled, self.rendered = [], [], []
assert get_rendered('page.html', 'en') == u'hi! default'
assert get_rendered('page.html', 'en') == u'default'
assert self.fetched == ['page.html:en', 'page.html',
'page.html.template:en', 'page.html.template']
assert self.compiled == ['page.html.template']
Expand All @@ -281,29 +265,26 @@ def test_get_rendered(self):
# (page.html.template:en and page.html.template:es remain cached).
utils.set_utcnow_for_test(52)

# Should fetch and recompile the base template but not the page.
# Should not recompile the page.
self.fetched, self.compiled, self.rendered = [], [], []
assert get_rendered('page.html', 'es') == u'\xa1hola! default'
assert self.fetched == ['page.html:es', 'page.html',
'base.html.template:es']
assert self.compiled == ['base.html.template:es']
assert get_rendered('page.html', 'es') == u'default'
assert self.fetched == ['page.html:es', 'page.html']
assert self.compiled == []
assert self.rendered == ['page.html.template']

# Should fetch and recompile both the fr page and the base template.
self.fetched, self.compiled, self.rendered = [], [], []
assert get_rendered('page.html', 'fr') == u'hi! fran\xe7ais'
assert get_rendered('page.html', 'fr') == u'fran\xe7ais'
assert self.fetched == ['page.html:fr', 'page.html',
'page.html.template:fr',
'base.html.template:fr', 'base.html.template']
assert self.compiled == ['page.html.template:fr', 'base.html.template']
'page.html.template:fr']
assert self.compiled == ['page.html.template:fr']
assert self.rendered == ['page.html.template:fr']

# Should fetch and recompile the base template but not the page.
# Should not recompile the page.
self.fetched, self.compiled, self.rendered = [], [], []
assert get_rendered('page.html', 'en') == u'hi! default'
assert self.fetched == ['page.html:en', 'page.html',
'base.html.template:en', 'base.html.template']
assert self.compiled == ['base.html.template']
assert get_rendered('page.html', 'en') == u'default'
assert self.fetched == ['page.html:en', 'page.html']
assert self.compiled == []
assert self.rendered == ['page.html.template']

# Ensure binary data is preserved.
Expand Down

0 comments on commit ef24cdd

Please sign in to comment.