【问题标题】:Using Django CBV TemplateView with custom render_to_reponse使用带有自定义 render_to_reponse 的 Django CBV TemplateView
【发布时间】:2018-05-28 00:22:35
【问题描述】:

我正在尝试覆盖 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?

【问题讨论】:

    标签: django django-views


    【解决方案1】:

    为什么不创建自己的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)
    

    顺便说一句,如果您需要自定义错误视图,您是否从 docs 那里检查过这个?

    【讨论】:

    • 谢谢,加布里埃尔。我想我不将字典理解为参数构造。我尝试提供字典,然后发回 response_kwargs 参数,但没有成功。没有尝试发送状态值的明显内容。一直在学习!
    猜你喜欢
    • 2015-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-21
    • 1970-01-01
    相关资源
    最近更新 更多