博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
3.5 自定义错误页面
阅读量:4095 次
发布时间:2019-05-25

本文共 1929 字,大约阅读时间需要 6 分钟。

—————————————————————————前言——————————————————————————

像常规路由一样, 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 %}
{% endblock %}{% block content %}
{% block page_content %}{% endblock %}
{% endblock %}
 
  不难看出,该模板继承了bootstrap提供的基模板, 而且定义了标题和导航条, 它的所有衍生模板都会有相同的标题和导航条,唯一不同的就是content块中只有一个div容器, 里面是一个page-content块, 块中的内容由衍生模板来定义。

#然后我们来写上面基模板的衍生模板404.html{% extends "base.html" %}{% block title %}Flasky - Page Not Found{% endblock %}{% blcok page-content %}

Not Found

{% endblock %}#利用基模板改写user.html:{% extends "base.html" %}{% block page-content %}
{% 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中导入类。

    输入不存在的地址:

    

你可能感兴趣的文章
你不知道的Virtual DOM
查看>>
VUE面试题总结
查看>>
写好JavaScript条件语句的5条守则
查看>>
原生JS中DOM节点相关API合集
查看>>
【TINY4412】U-BOOT移植笔记:(7)SDRAM驱动
查看>>
C++虚函数的总结
查看>>
什么是URL地址?
查看>>
C++多态的实现方式总结
查看>>
学习C++需要注意的问题
查看>>
C++模板
查看>>
C++双冒号(::)的用法
查看>>
【Unity】封装SQLite管理类
查看>>
【Unity】面试题整理
查看>>
【C#】如何实现一个迭代器
查看>>
【Unity】Destroy和DestroyImmediate的区别
查看>>
【Lua】Mac系统下配置SublimeText的Lua编译环境
查看>>
【C#】利用Conditional属性完成编译忽略
查看>>
【Unity】微信登录后将头像存为bytes,将bytes读取成sprite图片
查看>>
【Unity】使用GPS定位经纬度
查看>>
【UGUI/NGUI】一键换Text/Label字体
查看>>