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 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 | ||||
|   | ||||
							
								
								
									
										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 | ||||
|   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 | ||||
| ----- | ||||
|   | ||||
| @@ -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. | ||||
|   | ||||
							
								
								
									
										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 = { | ||||
|         '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], | ||||
|   | ||||
		Reference in New Issue
	
	Block a user