在Python的Django架構中編寫錯誤提示頁面

來源:互聯網
上載者:User
你應該在生產環境中把TEMPLATE_DEBUGFalse 如果這個設為`` True`` ,為了在那個好看的錯誤頁面上顯示足夠的東西,Django的模版系統就會為每一個模版儲存一些額外的資訊。
實現一個404模板

如果`` DEBUG`` 設定為`` True`` ,Django會顯示那個內建的404錯誤頁面。 但如果`` DEBUG`` 被設定成`` False`` ,那它的行為就不一樣了: 他會顯示一個在你的模版根目錄中名字叫`` 404.html`` 的模版 所以,當你準備部署你的應用時,你會需要建立這個模版並在裡面放一些有意義的“頁面未找到”的資訊

這裡有一個`` 404.html``的樣本,你可以從它開始。 假定你使用的模板繼承並定義一個 `` base.html``,該頁面由titlecontent兩塊組成。

{% extends "base.html" %}{% block title %}Page not found{% endblock %}{% block content %}

Page not found

Sorry, but the requested page could not be found.

{% endblock %}

要測試你的404.html頁面是否正常工作,僅僅需要將DEBUG 設定為`` False`` ,並且訪問一個並不存在的URL。 (它將在`` sunserver`` 上工作的和程式開發伺服器上一樣好)
實現一個500模板

類似的,如果`` DEBUG`` 設定為`` False`` ,Djang不再會顯示它內建的應對未處理的Python異常的錯誤反饋頁面。 作為代替,它會尋找一個名為`` 500.html`` 的模板並且顯示它。 像`` 404.html`` 一樣,這個模板應該被放置在你的模板根目錄下。

這裡有一個關於500.html的比較棘手的問題。你永遠不能確定`` 為什麼``會顯示這個模板,所以它不應該做任何需要串連資料庫,或者依賴任何可能被破壞的基礎構件的事情。 (例如:它不應該使用自訂模板標籤。)如果它用到了模板繼承,那麼父模板也就不應該依賴可能被破壞的基礎構件。 因此,最好的方法就是避免模板繼承,並且用一些非常簡單的東西。 這是一個`` 500.html`` 的例子,可以把它作為一個起點:

  Page unavailable  

Page unavailable

Sorry, but the requested page is unavailable due to a server hiccup.

Our engineers have been notified, so check back later.

設定錯誤警告

當你使用Django製作的網站運行中出現了異常,你會希望去瞭解以便於修正它。 預設情況下,Django在你的代碼引發未處理的異常時,將會發送一封Email至開發人員團隊。但你需要去做兩件事來設定這種行為。

首先,改變你的ADMINS設定用來引入你的E-mail地址,以及那些任何需要被注意的連絡人的E-mail地址。 這個設定採用了類似於(姓名, Email)元組,像這樣:

ADMINS = (  ('John Lennon', 'jlennon@example.com'),  ('Paul McCartney', 'pmacca@example.com'),)

第二,確保你的伺服器配置為寄送電子郵件。 設定好postfix,sendmail或其他本書範圍之外但是與Django設定相關的郵件伺服器,你需要將將 EMAIL_HOST設定為你的郵件伺服器的正確的主機名稱. 預設模式下是設定為'localhost', 這個設定對大多數的共用主機系統內容適用. 取決於你的安排的複雜性,你可能還需要設定 EMAIL_HOST_USER,EMAIL_HOST_PASSWORD,EMAIL_PORT或EMAIL_USE_TLS。

你還可以設定EMAIL_SUBJECT_PREFIX以控制Django使用的 error e-mail的首碼。 預設情況下它被設定為'[Django] '
設定串連中斷警報

如果你安裝有CommonMiddleware(比如,你的MIDDLEWARE_CLASSES設定包含了'django.middleware.common.CommonMiddleware'的情況下,預設就安裝了CommonMiddleware),你就具有了設定這個選項的能力:有人在訪問你的Django網站的一個非空的連結而導致一個404錯誤的發生和串連中斷的情況,你將收到一封郵件. 如果你想啟用這個特性,設定SEND_BROKEN_LINK_EMAILS 為True(預設為False),並設定你的MANAGERS為某個人或某些人的郵件地址,這些郵件地址將會收到報告串連中斷錯誤的郵件. MANAGERS使用和ADMINS 同樣的文法.例如:

MANAGERS = (  ('George Harrison', 'gharrison@example.com'),  ('Ringo Starr', 'ringo@example.com'),)

請注意,錯誤的Email會令人感到反感,對於任何人來說都是這樣。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.