Python Django handler500作为基于类的视图

Python Django handler500作为基于类的视图,python,django,error-handling,custom-error-pages,Python,Django,Error Handling,Custom Error Pages,为什么这不起作用 handler500 = TemplateView.as_view(template_name="500.html") 我得到以下例外情况: 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/han

为什么这不起作用

handler500 = TemplateView.as_view(template_name="500.html")
我得到以下例外情况:

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.
我发现这描述了你在那里使用基于类的视图,这是为什么

编辑:我最终使用了这个。。。但我仍然希望有人会告诉我如何让原来的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()

我宁愿在vanilla Django中使用stock 500模板和静态HTML,然后对代码执行任何操作。这是一个我认为不应该触碰的切换。

我认为它实际上非常简单(在Django 1.7和Python 3.4中):

views.py url.py
除非您具有呈现视图所需的最小上下文(例如,基于设备加载模板、具有错误报告表单等)。这并不是一个真正的答案。你真的测试过这个吗?如果你看到我问题中的第一个片段与你所说的完全一致(一行而不是三行)。它不起作用,因为错误视图需要一个简单的处理程序。。。除非它在Django的最新版本中被修复,否则你的答案将不起作用。我使用的方式略有不同,因为我的500视图生成的是JSON而不是HTML。这就是为什么我没有使用
TemplateView
,而是这样发布答案的原因。另外,我还使用了
python3.4
。我看到原始错误是在
wsgiref
库中的
Python2.6
中提出的。也许这实际上是Python的问题,而不是Django的问题。它不应该与Python的版本相关,只应该与Django的版本相关。基本上,错误视图传递的参数比正常视图预期的要少。那么您使用的是哪个Django版本?似乎这可能是“在我的机器上工作”的情况:P
from django.http import HttpResponse
from django.views.generic.base import View

class Custom500View(View):
    def dispatch(self, request, *args, **kwargs):
        return HttpResponse('My custom django 500 page')
from .views import Custom500View

handler500 = Custom500View.as_view()