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']
|
||||
if app_dirs:
|
||||
loaders += ['django.template.loaders.app_directories.Loader']
|
||||
if not debug:
|
||||
loaders = [('django.template.loaders.cached.Loader', loaders)]
|
||||
else:
|
||||
if app_dirs:
|
||||
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
|
||||
``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.
|
||||
|
||||
.. 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
|
||||
system should use for invalid (e.g. misspelled) variables.
|
||||
|
||||
|
@ -899,18 +907,22 @@ loaders that come with Django:
|
|||
|
||||
.. class:: cached.Loader
|
||||
|
||||
By default, the templating system will read and compile your templates every
|
||||
time they need to be rendered. While the Django templating system is quite
|
||||
fast, the overhead from reading and compiling templates can add up.
|
||||
By default (when :setting:`DEBUG` is ``True``), the template system reads
|
||||
and compiles your templates every time they're rendered. While the Django
|
||||
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
|
||||
a list of other loaders that it should wrap. The wrapped loaders are used to
|
||||
locate unknown templates when they are first encountered. The cached loader
|
||||
then stores the compiled ``Template`` in memory. The cached ``Template``
|
||||
instance is returned for subsequent requests to load the same template.
|
||||
You configure the cached template loader with a list of other loaders that
|
||||
it should wrap. The wrapped loaders are used to locate unknown templates
|
||||
when they're first encountered. The cached loader then stores the compiled
|
||||
``Template`` in memory. The cached ``Template`` instance is returned for
|
||||
subsequent requests to load the same template.
|
||||
|
||||
For example, to enable template caching with the ``filesystem`` and
|
||||
``app_directories`` template loaders you might use the following settings::
|
||||
This loader is automatically enabled if :setting:`DEBUG` is ``False`` and
|
||||
:setting:`OPTIONS['loaders'] <TEMPLATES-OPTIONS>` isn't specified.
|
||||
|
||||
You can also enable template caching with some custom template loaders
|
||||
using settings like this::
|
||||
|
||||
TEMPLATES = [{
|
||||
'BACKEND': 'django.template.backends.django.DjangoTemplates',
|
||||
|
@ -920,6 +932,7 @@ loaders that come with Django:
|
|||
('django.template.loaders.cached.Loader', [
|
||||
'django.template.loaders.filesystem.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
|
||||
<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``
|
||||
|
||||
|
|
|
@ -471,6 +471,12 @@ Miscellaneous
|
|||
:class:`~django.core.serializers.json.DjangoJSONEncoder` (renamed in Django
|
||||
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:
|
||||
|
||||
Features deprecated in 1.11
|
||||
|
|
|
@ -130,3 +130,18 @@ class DjangoTemplatesTests(TemplateStringsTests):
|
|||
engines['django'].from_string('Hello, {{ name }}').render({'name': '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,
|
||||
}, {
|
||||
'BACKEND': 'django.template.backends.django.DjangoTemplates',
|
||||
'APP_DIRS': True,
|
||||
'OPTIONS': {
|
||||
'context_processors': [
|
||||
'django.template.context_processors.request',
|
||||
],
|
||||
'loaders': [
|
||||
'django.template.loaders.filesystem.Loader',
|
||||
'django.template.loaders.app_directories.Loader',
|
||||
]
|
||||
},
|
||||
}])
|
||||
class TemplateLoaderTests(SimpleTestCase):
|
||||
|
|
|
@ -279,7 +279,7 @@ class FileSystemLoaderTests(SimpleTestCase):
|
|||
|
||||
@classmethod
|
||||
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()
|
||||
|
||||
@contextmanager
|
||||
|
|
Loading…
Reference in New Issue