使用django cbv templateView与自定义render_to_reponse



我正在尝试覆盖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方法(来自templateresmixin)由三个参数定义:

def render_to_response(self, context, **response_kwargs)

但是,当TemplateView从GET方法调用它时,它仅通过上下文:

return self.render_to_response(context)

如何将with_kwargs传递给render_to_response?

为什么不创建自己的ErrorTemplateView和覆盖get方法。由于您无法从TemplateView重复使用get的用例。

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)

顺便说一下,如果您需要自定义错误视图,您是否从文档中检查了此问题?

最新更新