Flask教程11模板
Posted zeug
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flask教程11模板相关的知识,希望对你有一定的参考价值。
- 基本使用
- 过滤器&自定义过滤器
- 控制代码块
- 宏、继承、包含
- Flask 的模板中特有变量和方法
- web表单
- CSRF
学习目标
- 能够写出 jinja2 中变量代码块和控制代码块的格式
- 能够写出在模板中字典,列表的取值方式
- 能够写出数组反转的自定义过滤器(使用1种方式即可)
- 能够说出Flask中模板代码复用的三种方式
- 能够使用代码实现模板继承的功能
- 能够说出可以在模板中直接使用的 Flask 变量和函数
- 能够使用 Flask-WTF 扩展实现注册表单
- 能够说出 CSRF 攻击的原理
一、Jinja2模板引擎简介
模板
在前面的示例中,视图函数的主要作用是生成请求的响应,这是最简单的请求。
实际上,视图函数有两个作用:处理业务逻辑和返回响应内容。
在大型应用中,把业务逻辑和表现内容放在一起,会增加代码的复杂度和维护成本。
本节学到的模板,它的作用即是承担视图函数的另一个作用,即返回响应内容。
- 模板其实是一个包含响应文本的文件,其中用占位符(变量)表示动态部分,告诉模板引擎其具体的值需要从使用的数据中获取
- 使用真实值替换变量,再返回最终得到的字符串,这个过程称为“渲染”
- Flask是使用 Jinja2 这个模板引擎来渲染模板
使用模板的好处:
- 视图函数只负责业务逻辑和数据处理(业务逻辑方面)
- 而模板则取到视图函数的数据结果进行展示(视图展示方面)
- 代码结构清晰,耦合度低
Jinja2
两个概念:
- Jinja2:是 Python 下一个被广泛应用的模板引擎,是由Python实现的模板语言,他的设计思想来源于 Django 的模板引擎,并扩展了其语法和一系列强大的功能,其是Flask内置的模板语言。
- 模板语言:是一种被设计来自动生成文档的简单文本格式,在模板语言中,一般都会把一些变量传给模板,替换模板的特定位置上预先定义好的占位变量名。
渲染模版函数
- Flask提供的 render_template 函数封装了该模板引擎
- render_template 函数的第一个参数是模板的文件名,后面的参数都是键值对,表示模板中变量对应的真实值。
使用
- 来表示变量名,这种 语法叫做变量代码块
<h1> post.title </h1>
Jinja2 模版中的变量代码块可以是任意 Python 类型或者对象,只要它能够被 Python 的 str() 方法转换为一个字符串就可以,比如,可以通过下面的方式显示一个字典或者列表中的某个元素:
your_dict[‘key‘] your_list[0]
- 用 %% 定义的控制代码块,可以实现一些语言层次的功能,比如循环或者if语句
% if user % user % else % hello! <ul> % for index in indexs % <li> index </li> % endfor % </ul>
注释
- 使用 # # 进行注释,注释的内容不会在html中被渲染出来
# name #
二、模板的使用
- 在项目下创建
templates
文件夹,用于存放所有的模板文件,并在目录下创建一个模板html文件temp_demo1.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> 我的模板html内容 </body> </html>
- 设置 templates 文件夹属性以便能够在代码中有智能提示
- 设置 html 中的模板语言,以便在 html 有智能提示
- 创建视图函数,将该模板内容进行渲染返回
@app.route(‘/‘) def index(): return render_template(‘temp_demo1.html‘)
访问:http://127.0.0.1:5000/ 运行测试
- 代码中传入字符串,列表,字典到模板中
@app.route(‘/‘) def index(): # 往模板中传入的数据 my_str = ‘Hello 博客园‘ my_int = 10 my_array = [3, 4, 2, 1, 7, 9] my_dict = ‘name‘: ‘xiaoming‘, ‘age‘: 18 return render_template(‘temp_demo1.html‘, my_str=my_str, my_int=my_int, my_array=my_array, my_dict=my_dict )
- 模板中代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> 我的模板html内容 <br/> my_str <br/> my_int <br/> my_array <br/> my_dict </body> </html>
- 运行效果
<!DOCTYPE html> 我的模板html内容 Hello 黑马程序员 10 [3, 4, 2, 1, 7, 9] ‘name‘: ‘xiaoming‘, ‘age‘: 18
- 相关运算,取值
<br/> my_int + 10 的和为: my_int + 10 <br/> my_int + my_array第0个值的和为: my_int + my_array[0] <br/> my_array 第0个值为: my_array[0] <br/> my_array 第1个值为: my_array.1 <br/> my_dict 中 name 的值为: my_dict[‘name‘] <br/> my_dict 中 age 的值为: my_dict.age
- 结果
my_int + 10 的和为:20
my_int + my_array第0个值的和为:13
my_array 第0个值为:3
my_array 第1个值为:4
my_dict 中 name 的值为:xiaoming sort:列表排序
以上是关于Flask教程11模板的主要内容,如果未能解决你的问题,请参考以下文章