diff --git a/django/core/checks/__init__.py b/django/core/checks/__init__.py index e446bdc099..5b665d23c1 100644 --- a/django/core/checks/__init__.py +++ b/django/core/checks/__init__.py @@ -8,6 +8,7 @@ from .registry import register, run_checks, tag_exists, Tags # Import these to force registration of checks import django.core.checks.compatibility.django_1_7_0 # NOQA +import django.core.checks.compatibility.django_1_8_0 # NOQA import django.core.checks.model_checks # NOQA import django.core.checks.security.base # NOQA import django.core.checks.security.csrf # NOQA diff --git a/django/core/checks/compatibility/django_1_8_0.py b/django/core/checks/compatibility/django_1_8_0.py new file mode 100644 index 0000000000..c0d8d0a779 --- /dev/null +++ b/django/core/checks/compatibility/django_1_8_0.py @@ -0,0 +1,31 @@ +from __future__ import unicode_literals + +from django.conf import global_settings, settings + +from .. import Tags, Warning, register + + +@register(Tags.compatibility) +def check_duplicate_template_settings(app_configs, **kwargs): + if settings.TEMPLATES: + values = [ + 'TEMPLATE_DIRS', + 'ALLOWED_INCLUDE_ROOTS', + 'TEMPLATE_CONTEXT_PROCESSORS', + 'TEMPLATE_DEBUG', + 'TEMPLATE_LOADERS', + 'TEMPLATE_STRING_IF_INVALID', + ] + duplicates = [ + value for value in values + if getattr(settings, value) != getattr(global_settings, value) + ] + if duplicates: + return [Warning( + "The standalone TEMPLATE_* settings were deprecated in Django " + "1.8 and the TEMPLATES dictionary takes precedence. You must " + "put the values of the following settings into your default " + "TEMPLATES dict: %s." % ", ".join(duplicates), + id='1_8.W001', + )] + return [] diff --git a/docs/ref/checks.txt b/docs/ref/checks.txt index b519b0afab..0509a13db5 100644 --- a/docs/ref/checks.txt +++ b/docs/ref/checks.txt @@ -182,6 +182,12 @@ that might occur as a result of a version upgrade. ``django.contrib.messages.middleware.MessageMiddleware`` were removed from the defaults. If your project needs these middleware then you should configure this setting. +* **1_8.W001**: The standalone ``TEMPLATE_*`` settings were deprecated in + Django 1.8 and the :setting:`TEMPLATES` dictionary takes precedence. You must + put the values of the following settings into your defaults ``TEMPLATES`` + dict: :setting:`TEMPLATE_DIRS`, :setting:`ALLOWED_INCLUDE_ROOTS`, + :setting:`TEMPLATE_CONTEXT_PROCESSORS`, :setting:`TEMPLATE_DEBUG`, + :setting:`TEMPLATE_LOADERS`, :setting:`TEMPLATE_STRING_IF_INVALID`. Admin ----- diff --git a/docs/releases/1.8.4.txt b/docs/releases/1.8.4.txt index 9252d9ae5a..e6606cb37f 100644 --- a/docs/releases/1.8.4.txt +++ b/docs/releases/1.8.4.txt @@ -11,3 +11,6 @@ Bugfixes * Added the ability to serialize values from the newly added :class:`~django.db.models.UUIDField` (:ticket:`25019`). + +* Added a system check warning if the old ``TEMPLATE_*`` settings are defined + in addition to the new ``TEMPLATES`` setting. diff --git a/tests/check_framework/tests_1_8_compatibility.py b/tests/check_framework/tests_1_8_compatibility.py new file mode 100644 index 0000000000..8f354b6b3a --- /dev/null +++ b/tests/check_framework/tests_1_8_compatibility.py @@ -0,0 +1,29 @@ +from django.core.checks.compatibility.django_1_8_0 import \ + check_duplicate_template_settings +from django.test import SimpleTestCase +from django.test.utils import override_settings + + +class CheckDuplicateTemplateSettingsTest(SimpleTestCase): + + def test_not_raised_if_no_templates_setting(self): + self.assertEqual(check_duplicate_template_settings(None), []) + + @override_settings( + TEMPLATES=[{'BACKEND': 'django.template.backends.django.DjangoTemplates'}], + TEMPLATE_DIRS=['/path/to/dirs'], + ) + def test_duplicate_setting(self): + result = check_duplicate_template_settings(None) + self.assertEqual(result[0].id, '1_8.W001') + + @override_settings( + TEMPLATES=[{'BACKEND': 'django.template.backends.django.DjangoTemplates'}], + TEMPLATE_DIRS=['/path/to/dirs'], + TEMPLATE_DEBUG=True, + ) + def test_multiple_duplicate_settings(self): + result = check_duplicate_template_settings(None) + self.assertEqual(len(result), 1) + self.assertTrue('TEMPLATE_DIRS' in result[0].msg) + self.assertTrue('TEMPLATE_DEBUG' in result[0].msg) diff --git a/tests/runtests.py b/tests/runtests.py index dc7f7c9532..7fdc227018 100755 --- a/tests/runtests.py +++ b/tests/runtests.py @@ -111,8 +111,6 @@ def setup(verbosity, test_labels): state = { 'INSTALLED_APPS': settings.INSTALLED_APPS, 'ROOT_URLCONF': getattr(settings, "ROOT_URLCONF", ""), - # Remove the following line in Django 1.10. - 'TEMPLATE_DIRS': settings.TEMPLATE_DIRS, 'TEMPLATES': settings.TEMPLATES, 'LANGUAGE_CODE': settings.LANGUAGE_CODE, 'STATIC_URL': settings.STATIC_URL, @@ -125,8 +123,6 @@ def setup(verbosity, test_labels): settings.ROOT_URLCONF = 'urls' settings.STATIC_URL = '/static/' settings.STATIC_ROOT = os.path.join(TMPDIR, 'static') - # Remove the following line in Django 1.10. - settings.TEMPLATE_DIRS = (TEMPLATE_DIR,) settings.TEMPLATES = [{ 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [TEMPLATE_DIR],