From 1956948c15844a0043d900f37b1cda37aabffd57 Mon Sep 17 00:00:00 2001 From: Thomas Gak Deluen Date: Wed, 13 May 2015 12:38:36 +0100 Subject: [PATCH] Added JinjaTemplateRenderer --- rest_framework/renderers.py | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/rest_framework/renderers.py b/rest_framework/renderers.py index 6c7cdf537..c2e761f09 100644 --- a/rest_framework/renderers.py +++ b/rest_framework/renderers.py @@ -200,6 +200,42 @@ class TemplateHTMLRenderer(BaseRenderer): response.status_text.title())) +class JinjaTemplateRenderer(TemplateHTMLRenderer): + """ + Renders data to HTML for use with the Jinja2 template engine. + + The template name is determined by (in order of preference): + + 1. An explicit .template_name set on the response. + 2. An explicit .template_name set on this class. + 3. The return result of calling view.get_template_names(). + """ + + def render(self, data, accepted_media_type=None, renderer_context=None): + + renderer_context = renderer_context or {} + view = renderer_context['view'] + request = renderer_context['request'] + response = renderer_context['response'] + + # add the current user to the context + # otherwise it won't be available in templates + renderer_context['user'] = request.user + + # get template (jinja2) + if response.exception: + template = self.get_exception_template(response) + else: + template_names = self.get_template_names(response, view) + template = self.resolve_template(template_names) + + # return the dict containing the context + # for jinja2 to process. + # Would throw a value error if a + # RequestContext was returned + return template.render(renderer_context) + + # Note, subclass TemplateHTMLRenderer simply for the exception behavior class StaticHTMLRenderer(TemplateHTMLRenderer): """