From a482cc0ba38febda15194dc121989eed3b6deec2 Mon Sep 17 00:00:00 2001 From: Luke Plant Date: Tue, 24 May 2011 21:28:43 +0000 Subject: Fixed #16004 - csrf_protect does not send cookie if view returns TemplateResponse The root bug was in decorator_from_middleware, and the fix also corrects bugs with gzip_page and other decorators. git-svn-id: http://code.djangoproject.com/svn/django/trunk@16276 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/utils/decorators.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'django/utils') diff --git a/django/utils/decorators.py b/django/utils/decorators.py index ee169ec7cc..22f33a76a4 100644 --- a/django/utils/decorators.py +++ b/django/utils/decorators.py @@ -95,10 +95,17 @@ def make_middleware_decorator(middleware_class): if result is not None: return result raise - if hasattr(middleware, 'process_response'): - result = middleware.process_response(request, response) - if result is not None: - return result + if hasattr(response, 'render') and callable(response.render): + if hasattr(middleware, 'process_template_response'): + response = middleware.process_template_response(request, response) + # Defer running of process_response until after the template + # has been rendered: + if hasattr(middleware, 'process_response'): + callback = lambda response: middleware.process_response(request, response) + response.add_post_render_callback(callback) + else: + if hasattr(middleware, 'process_response'): + return middleware.process_response(request, response) return response return _wrapped_view return _decorator -- cgit v1.3