Bootstrap

FastAPI - 应用Jinja2模板的简单案例

在 FastAPI 中使用 Jinja2 模板,需要安装 aiofilesjinja2 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})

在这个例子中,首先导入 FastAPIRequestHTMLResponseJinja2Templates。然后,创建一个 FastAPI 应用实例 app

使用 Jinja2Templates 来指定模板文件的目录,这里是 templates 文件夹。然后,定义路由 /items/{item_id},接受一个 item_id 参数,并返回一个 HTML 响应。

在路由处理函数中,创建 item 字典,字典包含了一些商品的信息。然后,使用 templates.TemplateResponse 来渲染 item.html 模板,并传递了 requestitem 这两个变量。

最后,运行 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 字典中的数据。

;