3.3、自定义错误页面

如果你在浏览器的地址栏中输入了不可用的路由,那么会显示一个状态码为 404 的错误页面。现在这个错误页面太简陋、平庸,而且样式和使用了 Bootstrap 的页面不一致。

像常规路由一样,Flask 允许程序使用基于模板的自定义错误页面。最常见的错误代码有两个:404,客户端请求未知页面或路由时显示;500,有未处理的异常时显示。为这两个错误代码指定自定义处理程序的方式如示例 3-6 所示。

示例 3-6 hello.py:自定义错误页面

@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

和视图函数一样,错误处理程序也会返回响应。它们还返回与该错误对应的数字状态码。错误处理程序中引用的模板也需要编写。这些模板应该和常规页面使用相同的布局,因此要有一个导航条和显示错误消息的页面头部。

编写这些模板最直观的方法是复制 templates/user.html,分别创建 templates/404.html 和templates/500.html,然后把这两个文件中的页面头部元素改为相应的错误消息。但这种方法会带来很多重复劳动。

Jinja2 的模板继承机制可以帮助我们解决这一问题。Flask-Bootstrap 提供了一个具有页面基本布局的基模板,同样,程序可以定义一个具有更完整页面布局的基模板,其中包含导航条,而页面内容则可留到衍生模板中定义。示例 3-7 展示了 templates/base.html 的内容,这是一个继承自 bootstrap/base.html 的新模板,其中定义了导航条。这个模板本身也可作为其他模板的基模板,例如 templates/user.html、templates/404.html 和 templates/500.html。

示例 3-7 templates/base.html:包含导航条的程序基模板

{% extends "bootstrap/base.html" %}

 

{% block title %}Flasky{% 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="/">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 %}

这个模板的 content 块中只有一个 <div> 容器,其中包含了一个名为 page_content 的新的空块,块中的内容由衍生模板定义。

现在,程序使用的模板继承自这个模板,而不直接继承自 Flask-Bootstrap 的基模板。通过继承 templates/base.html 模板编写自定义的 404 错误页面很简单,如示例 3-8 所示。 。

示例 3-8 templates/404.html:使用模板继承机制自定义 404 错误页面

错误页面在浏览器中的显示效果如下图所示。

 

{% extends "base.html" %}

 

{% block title %} Flasky-Page Not Found{% endblock %}

 

{% block page_content %}

<div class="page_header">

<h1>Not Found</h1>

</div>

{% endblock %}

 

 

 

templates/user.html 现在可以通过继承这个基模板来简化内容,如示例 3-9 所示。

示例 3-9 templates/user.html:使用模板继承机制简化页面模板

{% extends "base.html" %}

 

{% block title %}User{% endblock %}

 

{% block content%}

<div class="container">

<div class="page-header">

<h1>Hello,{{ name }}</h1>

</div>

</div>

{% endblock %}

 

 

转载于:https://www.cnblogs.com/sanduzxcvbnm/p/6649508.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/417012.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hive shell/sql 命令行

命令hive进入hive命令行 //列表数据库 show databases; //创建数据库 create database myhive; //创建数据库时检查存在与否 create database if not exists t1; //创建数据库时带注释 create database if not exists t2 comment learning hive; //创建带属性的数据库…

前端学习(2348):tabber

{"pages": [ //pages数组中第一项表示应用启动页&#xff0c;参考&#xff1a;https://uniapp.dcloud.io/collocation/pages{"path" : "pages/message/message","style" : {"navigationBarTitleText": "信息页",&…

辽宁交通职业技术学校计算机好不好,辽宁省交通高等专科学校信息工程系

信息工程系是学校“十一五”和“十二五”期间重点建设的校内五个重点专业群之一,也是首批国家高职示范校项目重点建设的专业群之一。现开设计算机网络技术、软件技术、计算机通信技术、图形图像制作、广告设计与制作、影视动画共6个专业,下设信息技术研究所和计算机基础、数学2…

[No0000D7]img生成器.bat合并所有图片到html网页中

ECHO OFF IF EXIST %~nx0.html DEL /F /Q %~nx0.html ECHO ^<html^>^<head^>^<title^>%~nx0^</title^>^</head^>^<body style"background:black;" οnlοad"window.setInterval(function(){window.scrollBy(0,800);},800);&qu…

前端学习(2349):tabber的其他属性

pages.json {"pages": [ //pages数组中第一项表示应用启动页&#xff0c;参考&#xff1a;https://uniapp.dcloud.io/collocation/pages{"path" : "pages/message/message","style" : {"navigationBarTitleText": "信…

计算机组成原理中ID是什么,计算机组成原理.doc

计算机组成原理课程作业_A 用户名&#xff1a;niekai最终成绩&#xff1a;80.0 HYPERLINK "//scores/?ag_id200580&assessmentid23539e75-90b3-487a-be10-06db93333cdd&stu_access_grading1&grading_curpage1&layoutwelcome_blank&role2&schoolG…

thinkphp无法登陆,session跨页后值为空

我已经出现过两次这种问题了&#xff0c;出现了两次就说明第一次没有解决彻底&#xff0c;所以表示thinkphp这个跨页后session为空而无法登陆的问题牵扯很多方面的问题了。经过这两次的研究&#xff0c;我觉得基本上能真正解决它了。 第一次出现的时候&#xff0c;我以为是目录…

前端学习(2350):condition启动模式配置

pages.json {"pages": [ //pages数组中第一项表示应用启动页&#xff0c;参考&#xff1a;https://uniapp.dcloud.io/collocation/pages{"path" : "pages/message/message","style" : {"navigationBarTitleText": "信…

PostgreSQL11 data数据库目录迁移

默认的数据库路径是/var/lib/pgsql/11/data 将现有的数据库文件全部拷贝到新的数据库路径下&#xff0c;然后重启 新建一个路径作为新的数据库数据路径&#xff0c;假如是/gdata/pgdata/data mkdir -p /gdata/pgdata/data chown -R postgres:postgres /gdata/pgdata/data c…

计算机硬件基础大纲,计算机硬件基础教学大纲..docx

计算机硬件技术基础 (III 教学大纲一、课程名称 :计算机硬件技术基础 (III二、课程代码 三、课程的基本要求1.微型计算机基础掌握微型计算机的组成以及各组成部分的主要功能特性 ;掌握微型计算机的总线结构以及简单的工作过程 ;了解现代先进计算机技术 ,了解衡量微型计算机性能…

C# WebApi POST 提交

暂时测试以json方式提交 Content-Type设置 Content-Type: application/json; charsetutf-8 提交参数 {"glsort": 6032,"page_index": 1,"page_size": 10 } WebApi接收 [HttpPost]public string List(dynamic data){int glsort Common.ObjectToI…

前端学习(2351):text组件的使用

detail.vue <template><view><view class""><text>唱歌跳舞</text></view><view seletable><text>唱歌跳舞</text></view><view seletable space"ensp"><text>唱歌 跳舞<…

电子信息工程跨考计算机武大,往届从材料跨考武大085208电子与通信工程初试303分 - 考研 - 小木虫 - 学术 科研 互动社区...

如果您因为分数原因没能如愿考上心目中理想的大学&#xff0c;只要您过了国家线B区分数线(按照往年的政策需要统考数学&#xff1a;参加数一或数二的考试)&#xff0c;材料、物理和化学相关专业&#xff0c;您可要参与报名参与桂林理工大学理学院的调剂,)&#xff0c;由于从201…

python连接postgresql数据库

连接postgresql数据库 pip install psycopg2 ## 导入psycopg2包 import psycopg2 ## 连接到一个给定的数据库 conn psycopg2.connect(database"postgres", user"postgres", password"postgres", host"127.0.0.1&…

前端学习(2352):view组件的使用

detail.vue <template><view><!-- <view class""><text>唱歌跳舞</text></view><view seletable><text>唱歌跳舞</text></view><view seletable space"ensp"><text>唱歌 …

Fatal error compiling: java.lang.ExceptionInInitializerError: com.sun.tools.javac.code.TypeTags

项目换用openjdk11后报错 Fatal error compiling: java.lang.ExceptionInInitializerError: com.sun.tools.javac.code.TypeTags 原因&#xff1a;lombok版本太低了&#xff0c;不支持java11 升级版本&#xff1a;到 1.18.6 <dependency> <groupId>org.projectl…

Spring集成JavaMail并利用线程池发送邮件

我们系统存在大量发送邮件的需求&#xff0c;项目使用的是Spring框架而JavaMail也能很好的跟Spring进行集成&#xff0c;由于发送邮件最好还是使用异步进行发送&#xff0c;所以这里就采用线程池JavaMail进行邮件发送&#xff0c;下面看具体代码实现&#xff1a; Step1、引入Ja…

计算机里创建本地磁盘分区,大神教你如何将本地硬盘进行分区!

如何将本地硬盘进行分区呢&#xff1f;不少小伙伴的电脑上只有一个磁盘C&#xff0c;这样子的话很容易造成磁盘空间不足&#xff0c;可要是进行分区一下的话&#xff0c;那么就不会有这个困扰咯&#xff0c;所以今天小编就来教教大家在不借助任何工具的情况下把本地硬盘进行分区…

consul通过web接口的kv存储操作

接口文档详见https://www.consul.io/api/kv.html 获取指定key的value Method Path Produces GET /kv/:key application/json curl http://10.129.63.40:9001/v1/kv/config/application/data key为config/application/data 返回值 [ { "LockIndex": 0, &qu…

前端学习(2353):button按钮组件的使用

detail.vue <template><view><!-- <view class""><text>唱歌跳舞</text></view><view seletable><text>唱歌跳舞</text></view><view seletable space"ensp"><text>唱歌 …