fastapi框架--jinja2
jinja2模版
对比python占位符,模板字符串,模板文件本质。
模板文件、模板渲染
动态文件、动态请求、动态网站
前后端不分离
语法:变量取值
{{ }}
、控制结构{% %}
jinja2是模板引擎
模板语法之变量渲染
文件
templates文件夹
index.html
main.py
# 以下是main.py文件
from fastapi import FastAPI
import uvicorn
from fastapi.templating import Jinja2Templates
app = FastAPI()
templates = Jinja2Templates(directory="templates")
@app.get("/index")
def index():
name = "root"
age = 32
books = ["书1","书2","书3","书4"]
info = {"name":"rain","age":32,"gender":"male"}
return templates.TemplateResponse(
"index.html", # 模板文件
{
"request":request,
"user":name,
"age":32,
"books":books,
"info":info
}, # context上下文对象,一个字典
)
if __name__ == '__main__':
uvicorn.run("main.app", port=8090, debug=True, reload=True)
<!-- 以下是index.html文件 -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p>用户名:{{user}}</p>
<p>年龄:{{age}}</p>
<p>四大名著:{{books}}</p>
<p>《1》:{{books.0}}</p>
<p>《2》:{{books.1}}</p>
<p>《3》:{{books.2}}</p>
<p>《4》:{{books.3}}</p>
<ul>
<li>{{books.0}}</li>
<li>{{books.1}}</li>
<li>{{books.2}}</li>
<li>{{books.3}}</li>
</ul>
<p>姓名:{{info.name}}</p>
<p>年龄:{{info.age}}</p>
<p>性别:{{info.gender}}</p>
</body>
</html>
模板将业务逻辑和页面逻辑分开,隔离。
模版语法之过滤器
变量可通过过滤器修改,过滤器可以看成是jinja2里的内置函数和字符串处理函数。把业务逻辑层的数据在模版语法层做更好的展示。展示层。
在HTML文件里写,格式是“|”加函数名。举例:<p>用户名:{{user | upper}}</p>
常用的有:capitialize首字母大写其余小写;title每个单词首字母转大写;trim去首尾空格;striptages渲染前删HTML标签;join拼接字符串;round四舍五入;safe渲染时不转义
模版语法之控制结构
分支控制
{% if %}
{% endif %}
{% if age>18 %}
<ul>
<li>电视剧1</li>
<li>电视剧2</li>
<li>电视剧3</li>
</ul>
{% else %}
<ul>
<li>动画片1</li>
<li>动画片2</li>
<li>动画片3</li>
</ul>
{% endif %}
循环控制
{% for book in books %}
<p>{{book}}</p>
{% endfor %}
<ul>
{% for book in books %}
<li>{{book}}</li>
{% endfor %}
</ul>
分支和循环还可以嵌套使用
books = [{"title":"书本1","price":400},
{"title":"书本2","price":199},
{"title":"书本3","price":200},
{"title":"书本4","price":399},
]
<ul>
{% for book in books %}
{% if book.price >= 200 %}
<li>{{book.title}}</li>
{% endif %}
{% endfor %}
</ul>
fastapi框架--jinja2
http://localhost:8090//archives/fastapikuang-jia