FastAPI系列(13):Jinja2模板介绍、模板语法之变量渲染
本系列汇总,请查看这里:https://www.cnblogs.com/uncleyong/p/19503695
Jinja2模板介绍
模板在Python的web开发中⼴泛使⽤,它能够有效的将业务逻辑和页⾯逻辑分开,使代码可读性增强、并且更加容易理解和维护。
模板简单来说就是⼀个包含占位变量的⽂件,占位变量表⽰动态的部分,模板⽂件在经过动态赋值后,返回给⽤户。
jinja2是Flask作者开发的⼀个模板系统,起初是仿django模板的⼀个模板引擎,为Flask提供模板⽀持,由于其灵活,快速和安全等优点被⼴泛使⽤。
用到Jinja2模板,客户端看到的内容和所有界面效果都是由服务端提供的,这就是前后端不分离的应用模式。
在jinja2中语法:
1. 变量取值 {{ }}
2. 控制结构 {% %}
安装
pip install jinja2
test_jinja2.py同目录下创建

变量渲染:示例1
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p>Welcome :{{ user}}</p>
</body>
</html>
test_jinja2.py
import uvicorn
from fastapi import FastAPI, Request
from fastapi.templating import Jinja2Templates
app = FastAPI()
templates = Jinja2Templates(directory="templates") # 实例化Jinja2对象,并将文件夹路径设置为以templates命令的文件夹
@app.get("/index")
def index(request: Request): # TemplateResponse要求上下文包含Request类型的对象,这里需要传入
name = "韧"
return templates.TemplateResponse(
"index.html", # 模板文件
{
"user": name,
"request": request, # TemplateResponse要求上下文(context)中必须包含 "request" 键,value是Request类型对象
}, # context上下文对象,一个字典
)
if __name__ == '__main__':
uvicorn.run("test_jinja2:app", port=8001, reload=True)
接口文档请求

可以可能到响应头是text/html
浏览器请求

变量渲染:示例2
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p>Welcome :{{ user}}</p>
<p>Job :{{ job }}</p>
<p>hobbies :{{ hobbies }}</p>
<p>hobby_1 :{{ hobbies.0 }}</p>
<p>hobby_2 :{{ hobbies.1 }}</p>
<p>hobby_3 :{{ hobbies.2 }}</p>
<ul>
<li>{{ hobbies.0 }}</li>
<li>{{ hobbies.1 }}</li>
<li>{{ hobbies.2 }}</li>
</ul>
<p>学校信息:{{ school_info }}</p>
<p>学号:{{ school_info.student_no }}</p>
<p>学校:{{ school_info.school_name }}</p>
<p>班级:{{ school_info.class_name }}</p>
<p>价格: {{ books.性能分析调优.price }}</p>
</body>
</html>
test_jinja2.py
import uvicorn
from fastapi import FastAPI, Request
from fastapi.templating import Jinja2Templates
app = FastAPI()
templates = Jinja2Templates(directory="templates") # 实例化Jinja2对象,并将文件夹路径设置为以templates命令的文件夹
@app.get("/index")
def index(request: Request): # TemplateResponse要求上下文包含Request类型的对象,这里需要传入
name = "韧"
job = "tester"
hobbies = ["coding", "swimming", "basketball"]
school_info = {"student_no": 12345, "class_name": "一年级一班", "school_name": "朝阳小学"}
books = {
"性能分析调优": {"price": 100, "publish": "人民教育出版社"},
}
return templates.TemplateResponse(
"index.html", # 模板文件
{
"user": name,
"job": job,
"hobbies": hobbies,
"school_info": school_info,
"books": books,
"request": request, # TemplateResponse要求上下文(context)中必须包含 "request" 键,value是Request类型对象
}, # context上下文对象,一个字典
)
if __name__ == '__main__':
uvicorn.run("test_jinja2:app", port=8001, reload=True)
接口文档请求

浏览器请求

__EOF__
本文作者:持之以恒(韧)
关于博主:擅长性能、全链路、自动化、企业级自动化持续集成(DevTestOps)、测开等
面试必备:项目实战(性能、自动化)、简历笔试,https://www.cnblogs.com/uncleyong/p/15777706.html
测试提升:从测试小白到高级测试修炼之路,https://www.cnblogs.com/uncleyong/p/10530261.html
欢迎分享:如果您觉得文章对您有帮助,欢迎转载、分享,也可以点击文章右下角【推荐】一下!
关于博主:擅长性能、全链路、自动化、企业级自动化持续集成(DevTestOps)、测开等
面试必备:项目实战(性能、自动化)、简历笔试,https://www.cnblogs.com/uncleyong/p/15777706.html
测试提升:从测试小白到高级测试修炼之路,https://www.cnblogs.com/uncleyong/p/10530261.html
欢迎分享:如果您觉得文章对您有帮助,欢迎转载、分享,也可以点击文章右下角【推荐】一下!

浙公网安备 33010602011771号