如何获取纯文本的Django错误页面
在开发过程中,我正在以调试模式运行Django,并且我通过一个文本模式的应用程序向我的应用发送数据。理想情况下,当我遇到HTTP错误代码500时,我希望能收到一个纯文本的响应,这样我就不用在那些HTML和JavaScript中寻找真正的错误了。
有没有办法让Django的500内部服务器错误以纯文本的形式返回呢?
5 个回答
8
有一个设置叫做 DEBUG_PROPAGATE_EXCEPTIONS,这个设置可以让Django不对错误进行处理,这样你就可以直接看到错误信息,比如在开发服务器的日志中。
22
如果你想在使用 curl
时得到一个纯文本的错误页面,你需要添加一个HTTP头信息 X-Requested-With
,它的值设置为 XMLHttpRequest
,比如:
curl -H 'X-Requested-With: XMLHttpRequest' http://example.com/some/url/
解释一下:这是因为Django会用 is_ajax
方法来判断是返回纯文本还是HTML页面。is_ajax
方法会查看 X-Requested-With
的值。
更新
从Django 3.1版本开始,错误报告会忽略 X-Requested-With
这个头信息。相反,你需要在请求中设置 Accept
头信息,值可以是任何有效的,不包含 text/html
这个类型的内容。
比如:
curl -H 'Accept: application/json;charset=utf-8' http://example.comp/some/url
8
我觉得应该写一个中间件,因为不这样的话,异常信息在500.html页面上是无法显示的。
http://docs.djangoproject.com/en/dev/topics/http/middleware/#process-exception
class ProcessExceptionMiddleware(object):
def process_exception(self, request, exception):
t = Template("500 Error: {{ exception }}")
response_html = t.render(Context({'exception' : exception }))
response = http.HttpResponse(response_html)
response.status_code = 500
return response