在 FastAPI 中使用 Jinja2 模板,需要安装 aiofiles 和 jinja2 Python 包。
pip install aiofiles jinja2
以下是一个使用 FastAPI 和 Jinja2 模板的基本示例:
首先,创建一个 Jinja2 模板文件 templates/item.html:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Item Details</title>
</head>
<body><h1>Item Details</h1><p>ID: {{ item.id }}</p><p>Name: {{ item.name }}</p><p>Description: {{ item.description }}</p><p>Price: {{ item.price }}</p>
</body>
</html>
然后,创建一个 FastAPI 应用:
from fastapi import FastAPI, Request
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templatesapp = FastAPI()# 设置模板目录
templates = Jinja2Templates(directory="templates")@app.get("/items/{item_id}", response_class=HTMLResponse)
async def read_item(request: Request, item_id: str):# 这里应该是从数据库或其他数据源获取数据的逻辑item = {"id": item_id,"name": "Sample Item","description": "This is a sample item","price": 42.00}return templates.TemplateResponse("item.html", {"request": request, "item": item})
在这个例子中,首先导入 FastAPI、Request、HTMLResponse 和 Jinja2Templates。然后,创建一个 FastAPI 应用实例 app。
使用 Jinja2Templates 来指定模板文件的目录,这里是 templates 文件夹。然后,定义路由 /items/{item_id},接受一个 item_id 参数,并返回一个 HTML 响应。
在路由处理函数中,创建 item 字典,字典包含了一些商品的信息。然后,使用 templates.TemplateResponse 来渲染 item.html 模板,并传递了 request 和 item 这两个变量。
最后,运行 FastAPI 应用:
if __name__ == "__main__":import uvicornuvicorn.run(app, host="0.0.0.0", port=8000)
当访问 http://127.0.0.1:8000/items/123 时,将看到渲染后的 item.html 模板,其中包含了 item 字典中的数据。