使用Django CBV TemplateView和自定义render_to_reponse

时间:2017-12-14 01:01:46

标签: django django-views

我正在尝试覆盖TemplateView中的render_to_response方法,以便为HTTP状态包含reponse_class的附加参数,但无法使用:

class ErrorView(TemplateView):
    ''' Inserts http status code into response '''

    status = None

    def render_to_response(self, context, **response_kwargs):
        if self.status is None:
            raise ImproperlyConfigured("ErrorView requires definition of status")

        return super(ErrorView,self).render_to_response(context,{'status': self.status})


class Error404View(ErrorView):
    template_name = '404.html'
    status = 404

render_to_response方法(来自TemplateResponseMixin)由三个参数定义:

def render_to_response(self, context, **response_kwargs)

但是,当TemplateView从get方法调用它时,它只传递上下文:

return self.render_to_response(context)

如何将response_kwargs传递给render_to_response?

1 个答案:

答案 0 :(得分:1)

为什么不创建自己的ErrorTemplateView并覆盖get方法。由于您无法将get方法用于TemplateView用于您的用例。

class ErrorTemplateView(TemplateView):
    status = None

    def get(self, request, *args, **kwargs):
        if self.status is None:
            raise ImproperlyConfigured("ErrorTemplateView requires definition of status")

        context = self.get_context_data(**kwargs)
        return self.render_to_response(context, status=self.status)

顺便说一下,如果您需要自定义错误视图,是否从docs

进行了检查