2013-04-09 23 views
1

我从另一个应用程序中调用Django。禁用Django例外格式

在调试过程中,如果发生Django异常,(html)响应正文被拾取,然后封装在调用应用程序中生成的异常中。

这使它成为一个真正的痛苦,以确定问题是什么,因为我需要通过CSS涉水,HTML,JS等

有没有什么办法让Django的,只输出异常信息和栈跟踪为纯文本?

enter image description here

+0

在django错误页面中有一个textarea w /明文回溯。不过,我认为你想调试关闭,稍后在生产机器和Django不会公开这个错误页面,只是简单的信息,例外发生。解决方案:您可以尝试编写中间件类,它会捕获异常,然后您可以使用它执行任何操作(通过套接字发送,写入文件,以纯文本形式输出...) – yedpodtrzitko 2013-04-09 10:22:14

回答

2

您可以编写自己的异常处理中间件类。参见文档为process_exception middleware method

process_exception(self, request, exception)

requestHttpRequest对象。 exception是由视图函数引发的一个Exception对象。

当视图引发异常时,Django调用process_exception()process_exception()应返回NoneHttpResponse对象。如果它返回一个HttpResponse对象,则该响应将返回给浏览器。否则,默认的异常处理踢

所以我认为你需要写这样的事:

import traceback 
from django.http import HttpResponse 

class PlainTextExceptionMiddleware(object): 
    def process_exception(self, request, exception): 
     return HttpResponse(traceback.format_exc(), "text/plain") 

,然后将该类添加到您的MIDDLEWARE_CLASSES设置。

+0

听起来像一个很好的解决方案 - 如果我不能得到@伊戈尔的建议工作,我会给它一个旋转。谢谢 – Basic 2013-04-09 13:59:22

1

只需设置在你的设置DEBUG_PROPAGATE_EXCEPTIONS

If set to True, Django’s normal exception handling of view functions 
will be suppressed, and exceptions will propagate upwards. This 
can be useful for some test setups, and should never be used on a live site. 

Django docs

+0

这看起来很有希望,但不会似乎没有任何影响。我会做一些阅读 – Basic 2013-04-09 13:58:35