在 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
字典中的数据。