FastAPI中Jinjia2使用
简介
- Jinja2 是一个现代的,设计者友好的,仿照 Django 模板的 Python 模板语言。 它速度快,被广泛使用,并且提供了可选的沙箱模板执行环境保证安全。
安装和初次使用
- 安装
pip install Jinjia2
pip install aiofiles # 适用于FastAPI
- 初次使用
- Python代码
from fastapi import FastAPI, Request
from fastapi.templating import Jinja2Templates
app = FastAPI() # 实例化 FastAPI对象
templates = Jinja2Templates(directory="templates") # 实例化Jinja2对象,并将文件夹路径设置为以templates命令的文件夹
@app.get('/')
def hello(request: Request):
return templates.TemplateResponse(
'index.html',
{
'requset': requset, # 注意,返回模板响应时,必须有request键值对,且值为Request请求对象
'word': 'Hello World'
}
)
- index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Jinjia2 Hello world</title>
</head>
<body>
<div>
显示的文字为:<br>
<h1>{{word}}</h1>
<h2>{{word}}</h2>
<h3>{{word}}</h3>
</div>
</body>
</html>
- 效果图
Jinja2模板继承
如果templates文件夹中众多html模板中有许多冗余的地方,例如背景、标题、内容显示、底部等,可以将冗余的Html代码写成base.html当作基类模板,其他模板文件可继承base.html实现同样的效果。
- base.html
<html lang="en">
<head>
<title>Jinja2 继承</title>
{% block head %}
{% endblock %}
</head>
{% block body %}
{% endblock %}
</html>
- {% block head %}{% block head %}等是为使用该基类模板的其他模板预留的代码块,其他模板可将对应代码块的代码插入到基类模板中,形成完整的HTML文档。
- index.html
{% extends 'base.html' %}
{% block head %}
<meta charset="UTF-8">
<!-- 引入vue -->
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
{% endblock %}
{% block body %}
<div>
Hello,Jinja2 继承
</div><br>
显示的文字为:
<br>
<h1>{{word}}</h1>
<h2>{{word}}</h2>
<h3>{{word}}</h3>
{% endblock %}
- index.py
from fastapi import FastAPI, Request
from fastapi.templating import Jinja2Templates
app = FastAPI() # 实例化 FastAPI对象
templates = Jinja2Templates(directory="templates") # 实例化Jinja2对象,并将文件夹路径设置为以templates命令的文件夹
@app.get('/')
def hello(request: Request):
return templates.TemplateResponse(
'index.html',
{
'requset': request, # 注意,返回模板响应时,必须有request键值对,且值为Request请求对象
'word': 'Hello Jinja2 继承'
}
)
- 效果图