mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	Fixed #24265 -- Preserved template backend loading exceptions.
If importing or initializing a template backend fails, attempting to access this template backend again must raise the same exception.
This commit is contained in:
		| @@ -90,6 +90,10 @@ class EngineHandler(object): | ||||
|                     "Could not find config for '{}' " | ||||
|                     "in settings.TEMPLATES".format(alias)) | ||||
|  | ||||
|             # If importing or initializing the backend raises an exception, | ||||
|             # self._engines[alias] isn't set and this code may get executed | ||||
|             # again, so we must preserve the original params. See #24265. | ||||
|             params = params.copy() | ||||
|             backend = params.pop('BACKEND') | ||||
|             engine_cls = import_string(backend) | ||||
|             engine = engine_cls(params) | ||||
|   | ||||
							
								
								
									
										37
									
								
								tests/template_backends/test_utils.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								tests/template_backends/test_utils.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | ||||
| from django.core.exceptions import ImproperlyConfigured | ||||
| from django.template import engines | ||||
| from django.test import SimpleTestCase, override_settings | ||||
|  | ||||
|  | ||||
| class TemplateStringsTests(SimpleTestCase): | ||||
|  | ||||
|     @override_settings(TEMPLATES=[{ | ||||
|         'BACKEND': 'raise.import.error', | ||||
|     }]) | ||||
|     def test_backend_import_error(self): | ||||
|         """ | ||||
|         Failing to import a backend keeps raising the original import error. | ||||
|  | ||||
|         Regression test for #24265. | ||||
|         """ | ||||
|         with self.assertRaises(ImportError): | ||||
|             engines.all() | ||||
|         with self.assertRaises(ImportError): | ||||
|             engines.all() | ||||
|  | ||||
|     @override_settings(TEMPLATES=[{ | ||||
|         'BACKEND': 'django.template.backends.django.DjangoTemplates', | ||||
|         # Incorrect: APP_DIRS and loaders are mutually incompatible. | ||||
|         'APP_DIRS': True, | ||||
|         'OPTIONS': {'loaders': []}, | ||||
|     }]) | ||||
|     def test_backend_improperly_configured(self): | ||||
|         """ | ||||
|         Failing to initialize a backend keeps raising the original exception. | ||||
|  | ||||
|         Regression test for #24265. | ||||
|         """ | ||||
|         with self.assertRaises(ImproperlyConfigured): | ||||
|             engines.all() | ||||
|         with self.assertRaises(ImproperlyConfigured): | ||||
|             engines.all() | ||||
		Reference in New Issue
	
	Block a user