mirror of https://github.com/django/django.git
Fixed #25788 -- Enabled the cached template loader if debug is False.
This commit is contained in:
parent
2ced2f785d
commit
277fe2e8f2
|
@ -27,6 +27,8 @@ class Engine(object):
|
||||||
loaders = ['django.template.loaders.filesystem.Loader']
|
loaders = ['django.template.loaders.filesystem.Loader']
|
||||||
if app_dirs:
|
if app_dirs:
|
||||||
loaders += ['django.template.loaders.app_directories.Loader']
|
loaders += ['django.template.loaders.app_directories.Loader']
|
||||||
|
if not debug:
|
||||||
|
loaders = [('django.template.loaders.cached.Loader', loaders)]
|
||||||
else:
|
else:
|
||||||
if app_dirs:
|
if app_dirs:
|
||||||
raise ImproperlyConfigured(
|
raise ImproperlyConfigured(
|
||||||
|
|
|
@ -103,8 +103,16 @@ what's passed by :class:`~django.template.backends.django.DjangoTemplates`.
|
||||||
* ``'django.template.loaders.app_directories.Loader'`` if and only if
|
* ``'django.template.loaders.app_directories.Loader'`` if and only if
|
||||||
``app_dirs`` is ``True``.
|
``app_dirs`` is ``True``.
|
||||||
|
|
||||||
|
If ``debug`` is ``False``, these loaders are wrapped in
|
||||||
|
:class:`django.template.loaders.cached.Loader`.
|
||||||
|
|
||||||
See :ref:`template-loaders` for details.
|
See :ref:`template-loaders` for details.
|
||||||
|
|
||||||
|
.. versionchanged:: 1.11
|
||||||
|
|
||||||
|
Enabling of the cached template loader when ``debug`` is ``False``
|
||||||
|
was added.
|
||||||
|
|
||||||
* ``string_if_invalid`` is the output, as a string, that the template
|
* ``string_if_invalid`` is the output, as a string, that the template
|
||||||
system should use for invalid (e.g. misspelled) variables.
|
system should use for invalid (e.g. misspelled) variables.
|
||||||
|
|
||||||
|
@ -899,18 +907,22 @@ loaders that come with Django:
|
||||||
|
|
||||||
.. class:: cached.Loader
|
.. class:: cached.Loader
|
||||||
|
|
||||||
By default, the templating system will read and compile your templates every
|
By default (when :setting:`DEBUG` is ``True``), the template system reads
|
||||||
time they need to be rendered. While the Django templating system is quite
|
and compiles your templates every time they're rendered. While the Django
|
||||||
fast, the overhead from reading and compiling templates can add up.
|
template system is quite fast, the overhead from reading and compiling
|
||||||
|
templates can add up.
|
||||||
|
|
||||||
The cached template loader is a class-based loader that you configure with
|
You configure the cached template loader with a list of other loaders that
|
||||||
a list of other loaders that it should wrap. The wrapped loaders are used to
|
it should wrap. The wrapped loaders are used to locate unknown templates
|
||||||
locate unknown templates when they are first encountered. The cached loader
|
when they're first encountered. The cached loader then stores the compiled
|
||||||
then stores the compiled ``Template`` in memory. The cached ``Template``
|
``Template`` in memory. The cached ``Template`` instance is returned for
|
||||||
instance is returned for subsequent requests to load the same template.
|
subsequent requests to load the same template.
|
||||||
|
|
||||||
For example, to enable template caching with the ``filesystem`` and
|
This loader is automatically enabled if :setting:`DEBUG` is ``False`` and
|
||||||
``app_directories`` template loaders you might use the following settings::
|
:setting:`OPTIONS['loaders'] <TEMPLATES-OPTIONS>` isn't specified.
|
||||||
|
|
||||||
|
You can also enable template caching with some custom template loaders
|
||||||
|
using settings like this::
|
||||||
|
|
||||||
TEMPLATES = [{
|
TEMPLATES = [{
|
||||||
'BACKEND': 'django.template.backends.django.DjangoTemplates',
|
'BACKEND': 'django.template.backends.django.DjangoTemplates',
|
||||||
|
@ -920,6 +932,7 @@ loaders that come with Django:
|
||||||
('django.template.loaders.cached.Loader', [
|
('django.template.loaders.cached.Loader', [
|
||||||
'django.template.loaders.filesystem.Loader',
|
'django.template.loaders.filesystem.Loader',
|
||||||
'django.template.loaders.app_directories.Loader',
|
'django.template.loaders.app_directories.Loader',
|
||||||
|
'path.to.custom.Loader',
|
||||||
]),
|
]),
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
@ -934,7 +947,10 @@ loaders that come with Django:
|
||||||
information, see :ref:`template tag thread safety considerations
|
information, see :ref:`template tag thread safety considerations
|
||||||
<template_tag_thread_safety>`.
|
<template_tag_thread_safety>`.
|
||||||
|
|
||||||
This loader is disabled by default.
|
.. versionchanged:: 1.11
|
||||||
|
|
||||||
|
The automatic enabling of the cached template loader when ``debug`` is
|
||||||
|
``False`` was added.
|
||||||
|
|
||||||
``django.template.loaders.locmem.Loader``
|
``django.template.loaders.locmem.Loader``
|
||||||
|
|
||||||
|
|
|
@ -471,6 +471,12 @@ Miscellaneous
|
||||||
:class:`~django.core.serializers.json.DjangoJSONEncoder` (renamed in Django
|
:class:`~django.core.serializers.json.DjangoJSONEncoder` (renamed in Django
|
||||||
1.0) is removed.
|
1.0) is removed.
|
||||||
|
|
||||||
|
* The :class:`cached template loader <django.template.loaders.cached.Loader>`
|
||||||
|
is now enabled if :setting:`DEBUG` is ``False`` and
|
||||||
|
:setting:`OPTIONS['loaders'] <TEMPLATES-OPTIONS>` isn't specified. This could
|
||||||
|
be backwards-incompatible if you have some :ref:`template tags that aren't
|
||||||
|
thread safe <template_tag_thread_safety>`.
|
||||||
|
|
||||||
.. _deprecated-features-1.11:
|
.. _deprecated-features-1.11:
|
||||||
|
|
||||||
Features deprecated in 1.11
|
Features deprecated in 1.11
|
||||||
|
|
|
@ -130,3 +130,18 @@ class DjangoTemplatesTests(TemplateStringsTests):
|
||||||
engines['django'].from_string('Hello, {{ name }}').render({'name': 'Bob & Jim'}),
|
engines['django'].from_string('Hello, {{ name }}').render({'name': 'Bob & Jim'}),
|
||||||
'Hello, Bob & Jim'
|
'Hello, Bob & Jim'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
default_loaders = [
|
||||||
|
'django.template.loaders.filesystem.Loader',
|
||||||
|
'django.template.loaders.app_directories.Loader',
|
||||||
|
]
|
||||||
|
|
||||||
|
@override_settings(DEBUG=False)
|
||||||
|
def test_non_debug_default_template_loaders(self):
|
||||||
|
engine = DjangoTemplates({'DIRS': [], 'APP_DIRS': True, 'NAME': 'django', 'OPTIONS': {}})
|
||||||
|
self.assertEqual(engine.engine.loaders, [('django.template.loaders.cached.Loader', self.default_loaders)])
|
||||||
|
|
||||||
|
@override_settings(DEBUG=True)
|
||||||
|
def test_debug_default_template_loaders(self):
|
||||||
|
engine = DjangoTemplates({'DIRS': [], 'APP_DIRS': True, 'NAME': 'django', 'OPTIONS': {}})
|
||||||
|
self.assertEqual(engine.engine.loaders, self.default_loaders)
|
||||||
|
|
|
@ -11,11 +11,14 @@ from django.test.client import RequestFactory
|
||||||
'APP_DIRS': True,
|
'APP_DIRS': True,
|
||||||
}, {
|
}, {
|
||||||
'BACKEND': 'django.template.backends.django.DjangoTemplates',
|
'BACKEND': 'django.template.backends.django.DjangoTemplates',
|
||||||
'APP_DIRS': True,
|
|
||||||
'OPTIONS': {
|
'OPTIONS': {
|
||||||
'context_processors': [
|
'context_processors': [
|
||||||
'django.template.context_processors.request',
|
'django.template.context_processors.request',
|
||||||
],
|
],
|
||||||
|
'loaders': [
|
||||||
|
'django.template.loaders.filesystem.Loader',
|
||||||
|
'django.template.loaders.app_directories.Loader',
|
||||||
|
]
|
||||||
},
|
},
|
||||||
}])
|
}])
|
||||||
class TemplateLoaderTests(SimpleTestCase):
|
class TemplateLoaderTests(SimpleTestCase):
|
||||||
|
|
|
@ -279,7 +279,7 @@ class FileSystemLoaderTests(SimpleTestCase):
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def setUpClass(cls):
|
def setUpClass(cls):
|
||||||
cls.engine = Engine(dirs=[TEMPLATE_DIR])
|
cls.engine = Engine(dirs=[TEMPLATE_DIR], loaders=['django.template.loaders.filesystem.Loader'])
|
||||||
super(FileSystemLoaderTests, cls).setUpClass()
|
super(FileSystemLoaderTests, cls).setUpClass()
|
||||||
|
|
||||||
@contextmanager
|
@contextmanager
|
||||||
|
|
Loading…
Reference in New Issue