Django handler500作为基于类的视图

Pyk*_*ler 9 python django error-handling custom-error-pages

为什么这不起作用

handler500 = TemplateView.as_view(template_name="500.html")
Run Code Online (Sandbox Code Playgroud)

我得到以下异常:

Traceback (most recent call last):
  File "/usr/lib/python2.6/wsgiref/handlers.py", line 94, in run    
    self.finish_response()
  File "/usr/lib/python2.6/wsgiref/handlers.py", line 134, in finish_response
    for data in self.result:
  File "/home/hatem/projects/leadsift_app/.virtualenv/lib/python2.6/site-packages/django/template/response.py", line 117, in __iter__
    raise ContentNotRenderedError('The response content must be 'ContentNotRenderedError: The response content must be rendered before it can be iterated over.
Run Code Online (Sandbox Code Playgroud)

我发现这组笔记描述了你在脚下射击自己使用基于类的视图,为什么会这样?

编辑:我最终使用了这个...但我仍然希望那里有人会告诉我如何获得原始的oneliner或类似的工作

class Handler500(TemplateView):
    template_name = "500.html"  
    @classmethod
    def as_error_view(cls):
        v = cls.as_view()
        def view(request):
            r = v(request)
            r.render()
            return r
        return view
handler500 = Handler500.as_error_view()
Run Code Online (Sandbox Code Playgroud)

pyd*_*nny 0

我宁愿只在 vanilla Django 中使用带有静态 HTML 的库存 500 个模板,然后用代码做任何事情。我认为这是一个不应触及的开关。

  • 除非您具有渲染视图所需的最少上下文(例如,加载基于设备的模板、具有错误报告表单等)。这并不能真正构成答案。 (2认同)