Flask允许程序基于模版定义自己的友好错误页面, 较常见的错误页面有404 page not found错误, 500 internal server error服务器错误。下面,我们基于Flask-Bootstrap来自定义这两种错误提示页面。Flask-Bootstrap是Flask扩展包,它能够提供基于Bootstrap 的页面框架样式。
首先, 我们要安装bootstrap扩展包(pip install flask-bootstrap),然后配置页面展示模版
1 {% extends "bootstrap/base.html" %} 2 <!-- 标题域 --> 3 {% block title %}Flasky{% endblock %} 4 5 {% block navbar %} 6 <div class="navbar navbar-inverse" role="navigation"> 7 <!-- 导航条 --> 8 <div class="container"> 9 <div class="navbar-header"> 10 <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> 11 <span class="sr-only">Toggle navigation</span> 12 <span class="icon-bar"></span> 13 <span class="icon-bar"></span> 14 <span class="icon-bar"></span> 15 </button> 16 <a class="navbar-brand" href="/">Flasky</a> 17 </div> 18 <div class="navbar-collapse collapse"> 19 <ul class="nav navbar-nav"> 20 <li><a href="{{url_for('hello', user_name='Jack')}}">Hello</a></li> 21 </ul> 22 </div> 23 </div> 24 </div> 25 {% endblock %} 26 27 {% block content %} 28 <!-- 内容块 --> 29 <div class="container"> 30 <div class="page-header"> 31 <h1>Hello, {{ name }}!</h1> 32 </div> 33 </div> 34 {% endblock %}
该页面定制了导航条,标题和内容三个部分,然后我们基于boots.html,制作个性化错误页面
1 {% extends 'boots.html' %} 2 {% block content %} 3 <!-- 内容块 --> 4 <div class="container"> 5 <div class="page-header"> 6 <img src="{{ url_for('.static',filename='404.jpg') }}"> 7 </div> 8 </div> 9 {% endblock %}
1 {% extends 'boots.html' %} 2 {% block content %} 3 <!-- 内容块 --> 4 <div class="container"> 5 <div class="page-header"> 6 <img src="{{ url_for('.static',filename='500.jpg') }}"> 7 </div> 8 </div> 9 {% endblock %}
{{ url_for('.static',filename='500.jpg') }}会去static文件夹下寻找500.jpg文件并显示在页面,url_for将链接到该文件所在地址http://127.0.0.1:5000/static/500.jpg
下面是我们的视图函数
1 from flask import Flask, render_template 2 from flask.ext.bootstrap import Bootstrap 3 4 app = Flask(__name__) 5 bootstrap = Bootstrap(app) 6 7 8 @app.route("/") 9 def index(): 10 return render_template("boots.html") 11 12 13 @app.route("/hello/<user_name>") 14 def hello(user_name): 15 return render_template("boots.html", name=user_name) 16 17 18 @app.errorhandler(404) 19 def page_not_found(e): 20 return render_template("404.html"), 404 21 22 23 @app.errorhandler(500) 24 def internal_server_error(e): 25 return render_template("500.html"), 500 26 27 28 if __name__ == "__main__": 29 app.run()
@app.errorhandler(errcode)是错误处理装饰器, 对应视图函数的返回值处理模版渲染外,还包括错误代码。
浙公网安备 33010602011771号