mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +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:
		
				
					committed by
					
						 Tim Graham
						Tim Graham
					
				
			
			
				
	
			
			
			
						parent
						
							269315d81a
						
					
				
				
					commit
					4cc0baa98e
				
			| @@ -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 | ||||||
|   | |||||||
							
								
								
									
										31
									
								
								django/core/checks/compatibility/django_1_8_0.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								django/core/checks/compatibility/django_1_8_0.py
									
									
									
									
									
										Normal 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 [] | ||||||
| @@ -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 | ||||||
| ----- | ----- | ||||||
|   | |||||||
| @@ -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. | ||||||
|   | |||||||
							
								
								
									
										29
									
								
								tests/check_framework/tests_1_8_compatibility.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								tests/check_framework/tests_1_8_compatibility.py
									
									
									
									
									
										Normal 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) | ||||||
| @@ -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], | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user