1
0
mirror of https://github.com/django/django.git synced 2024-12-27 19:46:22 +00:00

[1.8.x] Fixed #25079 -- Added warning if both TEMPLATES and TEMPLATE_* settings are defined.

Django ignores the value of the TEMPLATE_* settings if TEMPLATES is also
set, which is confusing for users following older tutorials. This change
adds a system check that warns if any of the TEMPLATE_* settings have
changed from their defaults but the TEMPLATES dict is also non-empty.

Removed the TEMPLATE_DIRS from the test settings file; this was marked
for removal in 1.10 but no tests fail if it is removed now.

Backport of 24620d71f2 from master
This commit is contained in:
Daniel Roseman 2015-07-11 18:15:38 +01:00 committed by Tim Graham
parent 269315d81a
commit 4cc0baa98e
6 changed files with 70 additions and 4 deletions

View File

@ -8,6 +8,7 @@ from .registry import register, run_checks, tag_exists, Tags
# Import these to force registration of checks # Import these to force registration of checks
import django.core.checks.compatibility.django_1_7_0 # NOQA 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.model_checks # NOQA
import django.core.checks.security.base # NOQA import django.core.checks.security.base # NOQA
import django.core.checks.security.csrf # NOQA import django.core.checks.security.csrf # NOQA

View File

@ -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 []

View File

@ -182,6 +182,12 @@ that might occur as a result of a version upgrade.
``django.contrib.messages.middleware.MessageMiddleware`` were removed from ``django.contrib.messages.middleware.MessageMiddleware`` were removed from
the defaults. If your project needs these middleware then you should the defaults. If your project needs these middleware then you should
configure this setting. 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 Admin
----- -----

View File

@ -11,3 +11,6 @@ Bugfixes
* Added the ability to serialize values from the newly added * Added the ability to serialize values from the newly added
:class:`~django.db.models.UUIDField` (:ticket:`25019`). :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.

View File

@ -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)

View File

@ -111,8 +111,6 @@ def setup(verbosity, test_labels):
state = { state = {
'INSTALLED_APPS': settings.INSTALLED_APPS, 'INSTALLED_APPS': settings.INSTALLED_APPS,
'ROOT_URLCONF': getattr(settings, "ROOT_URLCONF", ""), 'ROOT_URLCONF': getattr(settings, "ROOT_URLCONF", ""),
# Remove the following line in Django 1.10.
'TEMPLATE_DIRS': settings.TEMPLATE_DIRS,
'TEMPLATES': settings.TEMPLATES, 'TEMPLATES': settings.TEMPLATES,
'LANGUAGE_CODE': settings.LANGUAGE_CODE, 'LANGUAGE_CODE': settings.LANGUAGE_CODE,
'STATIC_URL': settings.STATIC_URL, 'STATIC_URL': settings.STATIC_URL,
@ -125,8 +123,6 @@ def setup(verbosity, test_labels):
settings.ROOT_URLCONF = 'urls' settings.ROOT_URLCONF = 'urls'
settings.STATIC_URL = '/static/' settings.STATIC_URL = '/static/'
settings.STATIC_ROOT = os.path.join(TMPDIR, 'static') settings.STATIC_ROOT = os.path.join(TMPDIR, 'static')
# Remove the following line in Django 1.10.
settings.TEMPLATE_DIRS = (TEMPLATE_DIR,)
settings.TEMPLATES = [{ settings.TEMPLATES = [{
'BACKEND': 'django.template.backends.django.DjangoTemplates', 'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [TEMPLATE_DIR], 'DIRS': [TEMPLATE_DIR],