—————————————————————————前言——————————————————————————
像常规路由一样, Flask允许程序使用基于模板的自定义错误页面。
——————————————————————————————————————————————————————
最常见的错误代码有两个:
1. 404, 客户端请求未知页面时显示
2. 500, 有未处理的异常时显示
一.为这两个代码指定自定义处理程序:
@app.errorhandler(404)
def page_not_found(e):
return render_template('404.html'), 404
@app.errorhandler(500)
def internal_server_error(e):
return render_template('500.html'), 500
和视图函数一样, 错误处理程序也会返回响应和数字状态码。
二. 错误处理程序搞定了, 下面我们来讨论其返回的模板:
上节我们讲到Flask-Bootstrap提供的基模板, 我们很容易想到, 只要把user.html的模板内容复制过来, 然后改一下页面内容不就行了, 这样确实可以达到目的, 但是所有模板都有重复的导航条代码不是一个好选择, 我们可以利用模板继承自己写一个带有导航条的基模板, 然后让所有模板继承这个基模板, 这样就可以达到简化模板的目的:
#templates/base.html: 包含导航条的程序基模板
{% extends 'bootstrap/base.html' %}
{% block title %}Flasky{% endblock %}
{% block navbar %}
<div class="navbar navbar-inverse" role="navgation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="se-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="/">Flasky</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 %}
不难看出,该模板继承了bootstrap提供的基模板, 而且定义了标题和导航条, 它的所有衍生模板都会有相同的标题和导航条,唯一不同的就是content块中只有一个div容器, 里面是一个page-content块, 块中的内容由衍生模板来定义。
#然后我们来写上面基模板的衍生模板404.html
{% extends "base.html" %}
{% block title %}Flasky - Page Not Found{% endblock %}
{% blcok page-content %}
<dic class="page-header" >
<h1>Not Found</h1>
</div>
{% endblock %}
#利用基模板改写user.html:
{% extends "base.html" %}
{% block page-content %}
<div class="page-header">
<h1>Hello, {{ name }!</h1>
</div>
{% endblock %}
三. 第二点讲的是理论知识, 实际操作中我们可以直接从版本库中迁出3c版本:
1.先进入flasky文件夹
2. 激活虚拟环境(不影响迁出版本, 安装拓展和运行服务器时一定不可省略该步)
3.迁出3c版本, 失败, 原因是之前修改了hello.py文件, 解决方法: git reset --hard 然后再迁即可。
迁出3c版本templates文件夹的前后变化:
迁出前:
迁出后:
主要变化的多了一个base.html文件, 该文件就是上面我们改写的基模板, 然后其他模板都是该基模板的衍生模板, 这个基模板帮助我们大大简化了模板的代码量。
2)运行效果图:
改图提示flask.ext.script已经过期, 我们应该从flask_script中导入Manager, 所以以后初始化扩展包, 我们应该从flask_xxx中导入类。
输入不存在的地址: