2
0
Эх сурвалжийг харах

Refs #24829 -- Made TemplateResponse.content available sooner in exception context

Thanks Tim Graham for the initial patch.
Claude Paroz 8 жил өмнө
parent
commit
742ea51413

+ 4 - 0
django/core/handlers/exception.py

@@ -85,6 +85,10 @@ def response_for_exception(request, exc):
         signals.got_request_exception.send(sender=None, request=request)
         response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info())
 
+    # Force a TemplateResponse to be rendered.
+    if not getattr(response, 'is_rendered', True) and callable(getattr(response, 'render', None)):
+        response = response.render()
+
     return response
 
 

+ 14 - 1
tests/handlers/tests_custom_error_handlers.py

@@ -1,7 +1,19 @@
 from django.conf.urls import url
 from django.core.exceptions import PermissionDenied
 from django.template.response import TemplateResponse
-from django.test import SimpleTestCase, override_settings
+from django.test import SimpleTestCase, modify_settings, override_settings
+
+
+class MiddlewareAccessingContent(object):
+    def __init__(self, get_response):
+        self.get_response = get_response
+
+    def __call__(self, request):
+        response = self.get_response(request)
+        # Response.content should be available in the middleware even with a
+        # TemplateResponse-based exception response.
+        assert response.content
+        return response
 
 
 def template_response_error_handler(request, exception=None):
@@ -20,6 +32,7 @@ handler403 = template_response_error_handler
 
 
 @override_settings(ROOT_URLCONF='handlers.tests_custom_error_handlers')
+@modify_settings(MIDDLEWARE={'append': 'handlers.tests_custom_error_handlers.MiddlewareAccessingContent'})
 class CustomErrorHandlerTests(SimpleTestCase):
 
     def test_handler_renders_template_response(self):