1.Flask模板介绍
前置:理解渲染机制即上篇笔记中render_template()功能是如何实现的!
1)找到html文件地址
2)读取html文件中的内容
3)替换html中的特殊字符
4)将html的内容发送给浏览器
1 <!-- html文件 --> 2 3 <!DOCTYPE html> 4 <html lang="en"> 5 <head> 6 <meta charset="UTF-8"> 7 <title>Title</title> 8 </head> 9 <body> 10 <nav> 11 导航条 12 </nav> 13 <h1 style="color: #f00">你好, 当前的时间是:{{time}} {{user}}</h1> 14 </body> 15 </html>
1 # Flask py文件 2 3 import os 4 from datetime import datetime 5 6 from flask import Flask,render_template 7 app = Flask(__name__) 8 9 10 @app.route('/') 11 def index(): 12 return 'index' 13 14 15 @app.route('/html') 16 def html_from_file(): 17 """ 把html文件的内容在浏览器展现出来""" 18 return render_template('index.html') 19 20 21 @app.route('/show/html') 22 def html_show(): 23 """ 理解渲染机制 """ 24 # 1. 找到磁盘上的html文件地址(全路径) 25 file_name = os.path.join(os.path.dirname(__file__), 'templates', 'index.html') 26 print(file_name) 27 # 2. 读取html文件中的内容 28 now_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S') 29 with open(file_name, 'r', encoding='utf-8') as f: 30 html = f.read() 31 # 3. 替换html中的特殊字符({{time}}) 32 html = html.replace('{{time}}', now_time) 33 # 4. 将html的内容发送给浏览器 34 return html
什么是模板?
- 模板其实是一个包含响应文本的文件,其中用占位符(变量)表示动态部分,告诉模板引擎其具体的值需要从使用的数据中获取
- 使用真实值替换变量,再返回最终得到的字符串,这个过程称为渲染
为什么学模板?刚刚的示例代码,将所有的业务逻辑代码都写在一个py文件里面,公共的业务变更需要修改多处代码;掌握模板之后,就可以解决上述问题。
2.入门Flask模板
2.1.模板引擎Jinja2
模板引擎:可以简单理解为,它就是对模板(html)中的内容按照一定规则(变量)进行替换。得到最终我们给客户端展示的页面(模板)
- Flask使用Jinja2作为默认模板引擎,安装Flask的时候已经自动安装了;不需要再次安装Jinja2了
- 如果不是Flask框架,是其他框架想要使用模板引擎,也是可以安装的。通过pip进行安装:pip install Jinja2;或者通过源码安装:python setup.py install(把源码先下载下来,进入setup.py文件的目录)
Jinja2的默认配置
- template_folder='templates':这个是模板存放的默认目录,也可以自定义但是不建议改,就用它默认的就行了,便于项目成员理解共识
- render_template():(x)html自动转义,把html读取出来,也可以对它里面一些变量进行替换,在Jinja2里面这些变量的格式为双大括号开头,双大括号结尾,如:{{name}}
- render_template_string():字符串自动转义,html是以字符串赋值给一个变量的时候,可以用这个方法,可以将html响应结果展示出来;如果跟render_template一样传html文件名时,render_template_string是不会读取里面文件的,只会将这个文件名展示出来
-
{% autoescape %}:手动设置是否转义
- 全局函数和辅助对象:增强模板的功能
什么是转义?
把有特殊意义的字符显示出来,例如:
- html标签中的<>:<>
- 代码中的&:&
- 特殊字符转义对照表;详细的可以百度键入关键字“HTML特殊转义字符对照表”进行搜索
示例:
2.2.模板常用全局对象
- config:Flask的配置信息
- request:请求的对象
- session:会话对象
- g:请求相关的全局变量(如:g.user)
2.3.模板常用全局函数
- url_for():URL解析函数(如:静态文件地址解析、链接跳转地址解析);传入视图函数,显示其url路径;
常用场景:html常常会进行href页面跳转,如果直接指定路由(即路径),当视图函数路由发生变更时,就会找不到。实际开发中路由地址会变,但是视图函数一般不会变,这时候我们就可以使用url_for对视图函数进行反向解析获取其路由,这样html页面就能正常跳转了
免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.