From 4c877d21701aea6e983f10afb7770af0f31da341 Mon Sep 17 00:00:00 2001 From: Nicholas Guriev Date: Tue, 19 Jul 2022 12:42:46 +0300 Subject: [PATCH] Extend template context in TemplateHTMLRenderer * Pass data as a whole. * Pass processing response. * Pass current view. * Request is always available in Django templates. Actually, the data can be accessed trough the response, the request and the response trough the view. --- rest_framework/renderers.py | 10 ++++++++-- tests/test_renderers.py | 1 + 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/rest_framework/renderers.py b/rest_framework/renderers.py index b74df9a0b..19539b7dd 100644 --- a/rest_framework/renderers.py +++ b/rest_framework/renderers.py @@ -169,10 +169,16 @@ class TemplateHTMLRenderer(BaseRenderer): return loader.select_template(template_names) def get_template_context(self, data, renderer_context): + result = {k: renderer_context[k] for k in ('request', 'response', 'view')} + result['data'] = data + try: + result.update(data) # for compatibility + except TypeError: + pass response = renderer_context['response'] if response.exception: - data['status_code'] = response.status_code - return data + result['status_code'] = response.status_code + return result def get_template_names(self, response, view): if response.template_name: diff --git a/tests/test_renderers.py b/tests/test_renderers.py index 8271608e1..8bbd32524 100644 --- a/tests/test_renderers.py +++ b/tests/test_renderers.py @@ -615,6 +615,7 @@ class StaticHTMLRendererTests(TestCase): def test_static_renderer_with_exception(self): context = { + 'view': APIView(), 'response': Response(status=500, exception=True), 'request': Request(HttpRequest()) }