在 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 Jinja2Templates
app = 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 uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
当访问 http://127.0.0.1:8000/items/123
时,将看到渲染后的 item.html
模板,其中包含了 item
字典中的数据。