Flask:模板
模板是一个包含响应文本的文件,其中包含用占位变量表示的动态部分,具体值只在请求的上下文中才能知道.使用真实值替换变量,再返回最终得到的响应字符串.这个过程称为渲染,为了渲染模板,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:模板的更多相关文章
- flask模板的基本用法(定界符、模板语法、渲染模板),模板辅助工具(上下文、全局对象、过滤器、测试器、模板环境对象)
flask模板 在动态web程序中,视图函数返回的HTML数据往往需要根据相应的变量(比如查询参数)动态生成. 当HTML代码保存到单独的文件中时,我们没法再使用字符串格式化或拼接字符串的当时在HTM ...
- flask模板,路由,消息提示,异常处理
1.flask的路由与反向路由 from flask import Flask, request, url_for app = Flask(__name__) @app.route('/') def ...
- Flask - 模板语言jinja2 和render_template高级用法
目录 Flask - 模板语言jinja2 和render_template高级用法 一. 字典传递至前端 二. 列表传入前端Jinja2 模板的操作: 三. 大字典传入前端 Jinja2 模板 四. ...
- Flask模板渲染
目录 Flask模板渲染 Jinja2模板引擎简介 模板 Jinja2 模板变量 变量 控制结构 宏,类似Python代码中的函数 模板继承 包含(Include) 过滤器 链式调用 常见内建过滤器 ...
- Flask模板注入
Flask模板注入 Flask模板注入漏洞属于经典的SSTI(服务器模板注入漏洞). Flask案例 一个简单的Flask应用案例: from flask import Flask,render_te ...
- 实验2、Flask模板、表单、视图和重定向示例
实验内容 1. 实验内容 表单功能与页面跳转功 能是Web应用程序的基础功能,学习并使用他们能够更好的完善应用程序的功能.Flask使用了名为Jinja2的模板引擎,该引擎根据用户的交互级别显示应用程 ...
- Flask 模板语言
Flask使用的是Jinja2模板引擎 举个例子: from flask import Flask, render_template app = Flask(__name__) @app.route( ...
- Flask模板_学习笔记
代码尽在我的github上面:https://github.com/521xueweihan 概述: 在Flask中,Jinja2默认配置如下: A.扩展名为.html,.htm, ...
- ThinkPhp模板转Flask模板
Template Converter 网上的PHP资源很多,项目要用Python,所以想起做一个模板转换器,从ThinkPhp转成Flask的Jinja模板. 直接指定两个目录,将目录下的模板文件转换 ...
- flask模板
做为python web开发领域的一员,flask跟Django在很多地方用法以都是相似的,比如flask的模板 模板就是服务器端的页面,在模板中可以使用服务端的语法进行输出控制 1.模板的工作原理 ...
随机推荐
- 2016集训测试赛(十八)Problem C: 集串雷 既分数规划学习笔记
Solution 分数规划经典题. 话说我怎么老是忘记分数规划怎么做呀... 所以这里就大概写一下分数规划咯: 分数规划解决的是这样一类问题: 有\(a_1, a_2 ... a_n\)和\(b_1, ...
- node.js博客GitHub搭建(hexo)
教程参考官网提供的: https://hexo.io/zh-cn/ 教程: https://hexo.io/zh-cn/docs/ 我的node.js环境: hexo博客全程采用markdown进行编 ...
- 聊聊、Zookeeper 数据结构和操作命令
Zookeeper 的视图结构跟标准的 Unix 文件系统很像,都有一个根节点 / .在根节点下面就是一个个的子节点,我们称为 ZNode.ZNode 是 Zookeeper 中最小数据单位,在 ZN ...
- 前台页面获取servlet传过来的数据
servlet中的代码: public void doGet(HttpServletRequest request, HttpServletResponse response) throws Serv ...
- [CentOS]怎样解决gcc版本号冲突?
今天碰到一个比較坑爹的问题.在centos上用yum安装编译环境,执行: yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel o ...
- Discussion about z pre-pass
Z pre-pass In the rendering Process, the first pass render to a depth buffer to get the front layer ...
- linux中shell script的追踪与调试
Shell调试篇 sh [-nvx] scripts.sh -n:不要执行script,仅查询语法的问题: -v:在执行script前,先将script的内容输出到屏幕上: -x:将使用到的scrip ...
- json-path解析json方便可靠
JsonPath is to JSON what XPATH is to XML, a simple way to extract parts of a given document. JsonPat ...
- JAVA Eclipse的Android的进程和生命周期是什么
安卓程序的生命周期是不受自己控制的,安卓的程序根据不同的重要性做了一些区分,最重要的进程仅仅在安卓已经崩溃或者卡死的情况下才会终止前台进程. Activity就是表现层的界面,它有三种常见的状态, ...
- C 递归 递归指的是在函数的定义中
C 递归 递归指的是在函数的定义中使用函数自身的方法. 举个例子:从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?"从前有座山,山里有座庙,庙里有个老和尚,正在给 ...