2013-11-15 40 views
0

我是全新的Django,並正在通過教程。我胖了一小段代碼,如果我像標準腳本一樣運行文件,通常會引發語法錯誤或名稱錯誤。但是,當我嘗試使用manage.py runserver瀏覽到網頁瀏覽器中的視圖時,我只是得到一個沒有相關錯誤/回溯的空白頁面。從我運行的控制檯manage.py runserver也是如此 - 它只顯示GET請求。另外,當啓動服務器時,控制檯顯示「找到0個錯誤」,這顯然是錯誤的。Django錯誤報告簡單語法錯誤

我的問題是Django如何報告錯誤和回溯?我需要啓用任何東西嗎? (我在我的settings.py文件中有DEBUG = True)對我來說,我可以做出一個小小的錯字,突然間整個網站停止工作,我不會得到報告問題出在哪裏。

回答

1

關於運行開發服務器,它會說在啓動服務器時發現了0個錯誤。這通常是指您的settings.py文件和模型中的配置和語法。它只會報告通過啓動代碼路徑出現的錯誤,這通常不會通過您的視圖處理程序。

在修改文件時,開發服務器足夠聰明,可以重新加載自己。語法錯誤會使開發服務器崩潰。

如果您看到一個空白頁面並且GET請求成功返回,那麼您的代碼在Django視角下工作正常。它處理請求並返回響應,但您知道響應不正確。通常,這裏的語法錯誤將導致視圖返回500,您將在視圖中看到返回的調試信息(如果DEBUG = True),並且您也將在控制檯中看到它。看起來你的拼寫錯誤是有效的python,因爲它成功地通過你的視圖處理程序返回一個空白頁面。除了Django的單元測試之外,除了單元測試以外,沒有什麼可以做的,空白頁可能是有效的響應。

現在,當您從開發轉移到生產時,您可能想知道頁面何時出現錯誤。​​來處理錯誤和其他消息。 settings.py文件中的默認值,設置了一個mail_admins處理程序,處理程序在django.request上發生錯誤。如果您在設置文件中設置了ADMINSEMAIL_BACKEND,那麼您將通過電子郵件發送堆棧跟蹤以查看服務器上發生的任何500錯誤。隨着你越來越複雜,你可以通過向Python的日誌框架和自定義處理程序發送消息來創建自己的日誌記錄。

import logging 

logger = logging.GetLogger(__name__) #using the module name so in your settings.py you can configure different settings per module 

logger.info('msg') 
logger.error('msg') 

我建議尋找到Sentry爲你的錯誤消息處理程序,即不打計數和存儲您的錯誤日誌。

+0

原來,這實際上是一個比鉛更多的問題。當我使用chrome時,我沒有在Django中看到任何「黃頁」錯誤(它們只是空白)。但是,當我使用IE,我得到它們。我將用這些細節創建一個新問題。 – jsexauer

+0

新問題在http://stackoverflow.com/questions/20031556/ – jsexauer

+0

這是有點不準確。在啓動過程中,視圖模塊中的* syntax errors *肯定會被捕獲,因爲Django需要導入視圖才能創建路由映射。但是,它不會在大多數模塊中捕獲任何* runtime *錯誤,但這是一個不同的問題。 – hayavuk