diff options
| author | Andrew Godwin <andrew@aeracode.org> | 2020-02-19 13:20:16 +0100 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2020-02-19 13:20:16 +0100 |
| commit | 1e858adf7fabdeb98f95503d30ed6769a08c44b2 (patch) | |
| tree | b219b31f4ea93a9ccf47187bad10e1ccf014b501 | |
| parent | b457068cf272bc9912187a2b7aaaa4445110735e (diff) | |
Refs #31224 -- Added BaseHandler.check_response().
| -rw-r--r-- | django/core/handlers/base.py | 42 |
1 files changed, 25 insertions, 17 deletions
diff --git a/django/core/handlers/base.py b/django/core/handlers/base.py index a7b8e61f60..418bc7a46b 100644 --- a/django/core/handlers/base.py +++ b/django/core/handlers/base.py @@ -115,30 +115,21 @@ class BaseHandler: response = self.process_exception_by_middleware(e, request) # Complain if the view returned None (a common error). - if response is None: - if isinstance(callback, types.FunctionType): # FBV - view_name = callback.__name__ - else: # CBV - view_name = callback.__class__.__name__ + '.__call__' - - raise ValueError( - "The view %s.%s didn't return an HttpResponse object. It " - "returned None instead." % (callback.__module__, view_name) - ) + self.check_response(response, callback) # If the response supports deferred rendering, apply template # response middleware and then render the response - elif hasattr(response, 'render') and callable(response.render): + if hasattr(response, 'render') and callable(response.render): for middleware_method in self._template_response_middleware: response = middleware_method(request, response) # Complain if the template response middleware returned None (a common error). - if response is None: - raise ValueError( - "%s.process_template_response didn't return an " - "HttpResponse object. It returned None instead." - % (middleware_method.__self__.__class__.__name__) + self.check_response( + response, + middleware_method, + name='%s.process_template_response' % ( + middleware_method.__self__.__class__.__name__, ) - + ) try: response = response.render() except Exception as e: @@ -157,6 +148,23 @@ class BaseHandler: return response raise + def check_response(self, response, callback, name=None): + """Raise an error if the view returned None.""" + if response is not None: + return + if not name: + if isinstance(callback, types.FunctionType): # FBV + name = 'The view %s.%s' % (callback.__module__, callback.__name__) + else: # CBV + name = 'The view %s.%s.__call__' % ( + callback.__module__, + callback.__class__.__name__, + ) + raise ValueError( + "%s didn't return an HttpResponse object. It returned None " + "instead." % name + ) + def reset_urlconf(sender, **kwargs): """Reset the URLconf after each request is finished.""" |
