模板是一个包含响应文本的文件,其中包含用占位变量表示的动态部分,具体值只在请求的上下文中才能知道.使用真实值替换变量,再返回最终得到的响应字符串.这个过程称为渲染,为了渲染模板,Flask使用了一个名为Jinja2的强大模板引擎.

前面的视图函数中,我们是通过return 'Hello World!'的方法来返回响应.但是这种情况下反馈少数的内容还可以,如果要反馈复杂的网页界面那就没办法了.这种情况就需要渲染模板了.代码如下通过render_template反馈具体的网页模板.默认情况下,Flask在程序文件夹中的template子文件夹中寻找模板.

from flask import render_template

@app.route('/')

def hello_world():

return render_template('index.html')

template中添加index.html.

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>Flask</title>

</head>

<body>

<p>欢迎来到Flask</p>

</body>

</html>

还可以在模板中传入参数并传递到html中

@app.route('/')

def hello_world():

name='zhf'

return render_template('index.html',name=name)

网页中通过{{name}}的方式进行传递.

{{ name }}<p>欢迎来到Flask</p>

还可以使用过滤器修改变量,过滤器名添加在变量后之后,中间使用竖线分隔

{{ name|capitalize }}<p>欢迎来到Flask</p>

Jinjia变量过滤器如下:

1safe:渲染值时不转义

2capitalize:把值的首字母转换成大写,其他字母转换成小写

3lower:把值转换成小写形式

4upper:把值转换成大写形式

5title:把值中每个单词的首字母都转换成大写

6trim:把值的首尾空格去掉

7striptags:渲染之前把指中所有的HTML标签都删掉

Flask中使用模板变量方式和django是一样的,都有控制结构.

@app.route('/')

def hello_world():

name=['c','c++','python']

return render_template('index.html',name=name)

HTML中的代码:

{% for i in name %}

<li>{{ i }}</li>

{% endfor %}

另一种重复使用代码的方式是模板继承,类似于python代码中的类继承.首先创建一个名为base.html的基模板.在这个模板中定义了名为head,title和body的块.块的定义是通过{% block}的方式来定义

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

{% block head %}

<title>{% block title %}{% endblock %}-My Applicaltion</title>

{% endblock %}

</head>

<body>

{% block body %}

{% endblock %}

</body>

</html>

在index.html中通过extends的方式来引用base.html.在extends指令之后,基模板中的3个块被重新定义,模板引擎会将其插入适当的位置,注意新定义的head块,在基模板中其内容不是空的,所以使用super()获取原来的内容.在index.html中重新定义的title,body块会覆盖base.html中的内容

{% extends "base.html" %}

{% block title %}index{% endblock %}

{% block head %}

{{ super() }}

<style>

</style>

{% endblock %}

{% block body %}

<h1>hello,world</h1>

{% endblock %}

使用Flask-Bootstrap:

在django中,Bootstrap的使用可以参考下面的这个例子

http://www.cnblogs.com/zhanghongfeng/p/7750088.html

在Flask中使用Bootstrap的方法和在django中不一样.首先需要安装Flask-Bootstrap的Flask扩展安装后使用方式如下

from flask_bootstrap import Bootstrap

app = Flask(__name__)

bootstrap=Bootstrap(app)

@app.route('/')

def hello_world():

name='zhf'

return render_template('index.html',name=name)

然后在index.html中使用方式如下:

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

{% block title %}Flask{% endblock %}

{% block content %}

<div class="container">

<div class="page-header"><h1>hello {{ name }}</h1></div>

</div>

{% endblock %}

通过extends “bootstrap/base.html”的方式来继承bootstrap的base页面,然后在页面中重新定义各种块,并在class中引用bootstrap中的CSS格式,得到的界面如下.

@font-face { font-family: "Times New Roman"; }@font-face { font-family: "宋体"; }p.MsoNormal { margin: 0pt 0pt 0.0001pt; text-align: justify; font-family: "Times New Roman"; font-size: 10.5pt; }h1 { margin-top: 5pt; margin-bottom: 5pt; text-align: left; font-family: 宋体; font-weight: bold; font-size: 24pt; }p.p { margin: 5pt 0pt; text-align: left; font-family: "Times New Roman"; font-size: 12pt; }span.msoIns { text-decoration: underline; color: blue; }span.msoDel { text-decoration: line-through; color: red; }div.Section0 { }

自定义错误页面

在HTML中,有各种状态码来指示访问状态.比如200表示访问成功,400表示客户端请求未知页面或路由时的显示,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

当访问不存在的页面的时候提示如下.

Internal Server Error

The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.

Flask:模板的更多相关文章

  1. flask模板的基本用法(定界符、模板语法、渲染模板),模板辅助工具(上下文、全局对象、过滤器、测试器、模板环境对象)

    flask模板 在动态web程序中,视图函数返回的HTML数据往往需要根据相应的变量(比如查询参数)动态生成. 当HTML代码保存到单独的文件中时,我们没法再使用字符串格式化或拼接字符串的当时在HTM ...

  2. flask模板,路由,消息提示,异常处理

    1.flask的路由与反向路由 from flask import Flask, request, url_for app = Flask(__name__) @app.route('/') def ...

  3. Flask - 模板语言jinja2 和render_template高级用法

    目录 Flask - 模板语言jinja2 和render_template高级用法 一. 字典传递至前端 二. 列表传入前端Jinja2 模板的操作: 三. 大字典传入前端 Jinja2 模板 四. ...

  4. Flask模板渲染

    目录 Flask模板渲染 Jinja2模板引擎简介 模板 Jinja2 模板变量 变量 控制结构 宏,类似Python代码中的函数 模板继承 包含(Include) 过滤器 链式调用 常见内建过滤器 ...

  5. Flask模板注入

    Flask模板注入 Flask模板注入漏洞属于经典的SSTI(服务器模板注入漏洞). Flask案例 一个简单的Flask应用案例: from flask import Flask,render_te ...

  6. 实验2、Flask模板、表单、视图和重定向示例

    实验内容 1. 实验内容 表单功能与页面跳转功 能是Web应用程序的基础功能,学习并使用他们能够更好的完善应用程序的功能.Flask使用了名为Jinja2的模板引擎,该引擎根据用户的交互级别显示应用程 ...

  7. Flask 模板语言

    Flask使用的是Jinja2模板引擎 举个例子: from flask import Flask, render_template app = Flask(__name__) @app.route( ...

  8. Flask模板_学习笔记

    代码尽在我的github上面:https://github.com/521xueweihan 概述:    在Flask中,Jinja2默认配置如下:        A.扩展名为.html,.htm, ...

  9. ThinkPhp模板转Flask模板

    Template Converter 网上的PHP资源很多,项目要用Python,所以想起做一个模板转换器,从ThinkPhp转成Flask的Jinja模板. 直接指定两个目录,将目录下的模板文件转换 ...

  10. flask模板

    做为python web开发领域的一员,flask跟Django在很多地方用法以都是相似的,比如flask的模板 模板就是服务器端的页面,在模板中可以使用服务端的语法进行输出控制 1.模板的工作原理 ...

随机推荐

  1. 洛谷1373小a和uim之大逃离

    题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北部天边急涌过来,还伴着一道道闪电,一阵阵雷声.刹那间,狂风大作,乌云布满了天空,紧接着豆大的雨点从天空中打落下来,只见前方出现了一个 ...

  2. DiSC小记

    最近在单位进行管理培训时进行了一个DiSC的心理测试,DiSC是Dominance,influence,Steadiness和Conscientiousness四个英文单词的首字母缩写.这四个单词对应 ...

  3. Debugging that latch timeout

    https://troubleshootingsql.com/tag/stack-dump/ Book on Azure and SQL Server

  4. nginx +uwsgi + django配置

    一 安装 nginx 二 安装 uwsgi  ,pip install uwsgi 三 配置nginx 打开 nginx.conf文件, location / { # root html; # ind ...

  5. flask的httponly默认值为True

    如图flask的app.py里显示app的默认配置,httponly默认值为true,所以如果开发者不修改这个配置的话,攻击者是无法通过xss攻击读取浏览器cookie这部分信息的. Cookie:s ...

  6. 卷积 convolution

    这东西大学学过,然后我忘记了,后来就只记得这个名字了. https://zh.wikipedia.org/wiki/%E5%8D%B7%E7%A7%AF http://www.guokr.com/po ...

  7. 字符串匹配算法系列一:KMP算法原理

    本文主要参考了https://mp.weixin.qq.com/s/rbaPmBejID8-rYui35Snrg的表述,加上部分自己的理解 学习任何算法都要了解该算法解决什么问题?我们看看KMP算法主 ...

  8. 黑苹果+win10双系统折腾笔记

    寒假趁机在家折腾一下黑苹果 笔记本配置:神船K610D I7 4600 ,其他配置思路一样,驱动要自己找 镜像和工具:OS X Yosemite 10.10.3 镜像 WIN10 TLSB 2016 ...

  9. UNIX/LINUX使用expect实现人机自己主动交互功能

    expect使用方法 [#!/usr/bin/expect] 这一行告诉操作系统脚本里的代码使用那一个shell来运行.这里的expect事实上和linux下的bash.windows下的cmd是一类 ...

  10. Docker 三大核心工具

    Docker-machineDocker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox. Digital Oc ...