1. 程式人生 > >Flask模版例項:自定義錯誤頁面

Flask模版例項:自定義錯誤頁面

自定義錯誤頁面

如果你在瀏覽器的位址列中輸入了不可用的路由,那麼會顯示一個狀態碼為 404 的錯誤頁面。現在我們通過使用模版改造這個頁面。

像常規路由一樣,Flask 允許程式使用基於模版的自定義錯誤頁面。最常見的錯誤程式碼有兩個:

  • 404:客戶端請求未知頁面或路由時顯示
  • 500:有未處理的異常時顯示

為這兩個錯誤程式碼指定自定義處理程式的方式:

@app.errorhandler(404)
def page_not_fount(e):
    return render_template('404.html'), 404

@app.errorhandler(500)
def internal_server_error
(e):
return

和檢視函式一樣,錯誤處理程式也會返回響應。它們還返回與該錯誤對應的數字狀態碼。

錯誤處理程式中引用的模版也需要編寫。這些模版應該和常規頁面使用相同的佈局,因此要有一個導航條和顯示錯誤訊息的頁面頭部。

Jinja2 的模版繼承機制可以幫助我們解決這一問題。Flask-Bootstrap 提供了一個具有頁面基本佈局的基模版,同樣,程式可以定義一個具有更完整頁面佈局的基模版,基本包含導航條,而頁面內容則可留到衍生模版中定義。

首先我們建立一個基模版,它繼承自 bootstrap/base.html ,其中定義了導航條

示例 templates/base.html

基模版

{% extends "bootstrap/base.html" %}{% block title %}Title{% endblock %}{% block navbar %}
<div class="navbar navbar-inverse" role="navigation">
    <div class="container">
        <div class="navbar-header">
            <button type="button" class="navbar-toggle"
            data-toggle
="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="/">Flask</a> </div> <div class="navbar-collapse collapse"> <ul class="nav navbar-nav"> <li><a href="/">Home</a></li> </ul> </div> </div> </div>
{% endblock %}{% block content %} <div class="container"> {% block page_content %}{% endblock %} </div> {% endblock %}

這個模版的 content 塊中只有一個 <div> 容器, 其中包含了一個名為 page_content 的新的空塊, 塊中的內容由衍生模版定義。

現在, 程式使用的模版整合自這個模版, 而不直接整合字 Flask-Bootstrap 的基模版。通過繼承 templates/base.htm 模版編寫自定義 404 錯誤頁面很簡單

示例 templates/404.html 使用模版整合機制自定義 404 錯誤頁面

{% extends "base.html" %}{% block title %}Page Not Found{% endblock %}{% block page_content %}
<div class="page-header">
    <h1>Not Found</h1>
</div>
{% endblock %}