3.5 自定义错误页面

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

像常规路由一样, 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中导入类。

    输入不存在的地址:

    



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值