2013-04-09 25 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