如何获取纯文本的Django错误页面

14 投票
5 回答
3976 浏览
提问于 2025-04-16 11:22

在开发过程中,我正在以调试模式运行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

撰写回答