Flask模版例項:自定義錯誤頁面
阿新 • • 發佈:2019-02-13
自定義錯誤頁面
如果你在瀏覽器的位址列中輸入了不可用的路由,那麼會顯示一個狀態碼為 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 %}