diff options
author | Preston Timmons <prestontimmons@gmail.com> | 2015-05-08 15:10:36 -0500 |
---|---|---|
committer | Preston Timmons <prestontimmons@gmail.com> | 2015-05-21 09:12:06 -0500 |
commit | 655f52491505932ef04264de2bce21a03f3a7cd0 (patch) | |
tree | c38eca24b887466fc2385fc773ff34247567c732 /tests/template_backends | |
parent | 7b8008a078ffdfd18ebbe78fecbb92cdddf2f304 (diff) | |
download | django-655f52491505932ef04264de2bce21a03f3a7cd0.tar.gz |
Fixed #17085, #24783 -- Refactored template library registration.
* Converted the ``libraries`` and ``builtins`` globals of
``django.template.base`` into properties of the Engine class.
* Added a public API for explicit registration of libraries and builtins.
Diffstat (limited to 'tests/template_backends')
12 files changed, 87 insertions, 1 deletions
diff --git a/tests/template_backends/apps/__init__.py b/tests/template_backends/apps/__init__.py new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/tests/template_backends/apps/__init__.py diff --git a/tests/template_backends/apps/good/__init__.py b/tests/template_backends/apps/good/__init__.py new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/tests/template_backends/apps/good/__init__.py diff --git a/tests/template_backends/apps/good/templatetags/__init__.py b/tests/template_backends/apps/good/templatetags/__init__.py new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/tests/template_backends/apps/good/templatetags/__init__.py diff --git a/tests/template_backends/apps/good/templatetags/empty.py b/tests/template_backends/apps/good/templatetags/empty.py new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/tests/template_backends/apps/good/templatetags/empty.py diff --git a/tests/template_backends/apps/good/templatetags/good_tags.py b/tests/template_backends/apps/good/templatetags/good_tags.py new file mode 100644 index 0000000000..9bec93d8e5 --- /dev/null +++ b/tests/template_backends/apps/good/templatetags/good_tags.py @@ -0,0 +1,3 @@ +from django.template import Library + +register = Library() diff --git a/tests/template_backends/apps/good/templatetags/override.py b/tests/template_backends/apps/good/templatetags/override.py new file mode 100644 index 0000000000..9bec93d8e5 --- /dev/null +++ b/tests/template_backends/apps/good/templatetags/override.py @@ -0,0 +1,3 @@ +from django.template import Library + +register = Library() diff --git a/tests/template_backends/apps/good/templatetags/subpackage/__init__.py b/tests/template_backends/apps/good/templatetags/subpackage/__init__.py new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/tests/template_backends/apps/good/templatetags/subpackage/__init__.py diff --git a/tests/template_backends/apps/good/templatetags/subpackage/tags.py b/tests/template_backends/apps/good/templatetags/subpackage/tags.py new file mode 100644 index 0000000000..9bec93d8e5 --- /dev/null +++ b/tests/template_backends/apps/good/templatetags/subpackage/tags.py @@ -0,0 +1,3 @@ +from django.template import Library + +register = Library() diff --git a/tests/template_backends/apps/importerror/__init__.py b/tests/template_backends/apps/importerror/__init__.py new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/tests/template_backends/apps/importerror/__init__.py diff --git a/tests/template_backends/apps/importerror/templatetags/__init__.py b/tests/template_backends/apps/importerror/templatetags/__init__.py new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/tests/template_backends/apps/importerror/templatetags/__init__.py diff --git a/tests/template_backends/apps/importerror/templatetags/broken_tags.py b/tests/template_backends/apps/importerror/templatetags/broken_tags.py new file mode 100644 index 0000000000..4f240e5923 --- /dev/null +++ b/tests/template_backends/apps/importerror/templatetags/broken_tags.py @@ -0,0 +1 @@ +import DoesNotExist # noqa diff --git a/tests/template_backends/test_django.py b/tests/template_backends/test_django.py index a8cc0d58b8..2a21b04b5a 100644 --- a/tests/template_backends/test_django.py +++ b/tests/template_backends/test_django.py @@ -2,7 +2,8 @@ from template_tests.test_response import test_processor_name from django.template import RequestContext from django.template.backends.django import DjangoTemplates -from django.test import RequestFactory, ignore_warnings +from django.template.library import InvalidTemplateLibrary +from django.test import RequestFactory, ignore_warnings, override_settings from django.utils.deprecation import RemovedInDjango20Warning from .test_dummy import TemplateStringsTests @@ -51,3 +52,78 @@ class DjangoTemplatesTests(TemplateStringsTests): "the two arguments refer to the same request.") with self.assertRaisesMessage(ValueError, msg): template.render(request_context, other_request) + + @override_settings(INSTALLED_APPS=['template_backends.apps.good']) + def test_templatetag_discovery(self): + engine = DjangoTemplates({ + 'DIRS': [], + 'APP_DIRS': False, + 'NAME': 'django', + 'OPTIONS': { + 'libraries': { + 'alternate': 'template_backends.apps.good.templatetags.good_tags', + 'override': 'template_backends.apps.good.templatetags.good_tags', + }, + }, + }) + + # libraries are discovered from installed applications + self.assertEqual( + engine.engine.libraries['good_tags'], + 'template_backends.apps.good.templatetags.good_tags', + ) + self.assertEqual( + engine.engine.libraries['subpackage.tags'], + 'template_backends.apps.good.templatetags.subpackage.tags', + ) + # libraries are discovered from django.templatetags + self.assertEqual( + engine.engine.libraries['static'], + 'django.templatetags.static', + ) + # libraries passed in OPTIONS are registered + self.assertEqual( + engine.engine.libraries['alternate'], + 'template_backends.apps.good.templatetags.good_tags', + ) + # libraries passed in OPTIONS take precedence over discovered ones + self.assertEqual( + engine.engine.libraries['override'], + 'template_backends.apps.good.templatetags.good_tags', + ) + + @override_settings(INSTALLED_APPS=['template_backends.apps.importerror']) + def test_templatetag_discovery_import_error(self): + """ + Import errors in tag modules should be reraised with a helpful message. + """ + with self.assertRaisesMessage( + InvalidTemplateLibrary, + "ImportError raised when trying to load " + "'template_backends.apps.importerror.templatetags.broken_tags'" + ): + DjangoTemplates({ + 'DIRS': [], + 'APP_DIRS': False, + 'NAME': 'django', + 'OPTIONS': {}, + }) + + def test_builtins_discovery(self): + engine = DjangoTemplates({ + 'DIRS': [], + 'APP_DIRS': False, + 'NAME': 'django', + 'OPTIONS': { + 'builtins': ['template_backends.apps.good.templatetags.good_tags'], + }, + }) + + self.assertEqual( + engine.engine.builtins, [ + 'django.template.defaulttags', + 'django.template.defaultfilters', + 'django.template.loader_tags', + 'template_backends.apps.good.templatetags.good_tags', + ] + ) |