Change template context generation in TemplateHTMLRenderer by rfleschenberg · Pull Request #4236 · encode/django-rest-framework (original) (raw)

Make TemplateHTMLRenderer more subclass-friendly. Refs #4230.

This allows users to write code like this:

class ViewInContextHTMLRenderer(TemplateHTMLRenderer):

    def get_template_context(self, data, renderer_context):
        context = super().get_template_context(data, renderer_context)
        context['view'] = renderer_context['view']
        return context

Or maybe even:

class ExtraContextHTMLRenderer(TemplateHTMLRenderer):

    def get_template_context(self, data, renderer_context):
        context = super().get_template_context(data, renderer_context)
        context.update(renderer_context['extra_template_context'])
        return context

Currently, you have to override and reimplement the whole render() method instead.

This change does break compatibility with existing code that touches this interface. As far as I see, the interface was not documented. If desirable, we could add a compatibility shim.