FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,它基于标准 Python 类型提示。FastAPI 支持异步编程,使得开发高性能的 Web 应用变得简单快捷。在本文中,我们将探讨如何使用 FastAPI 结合 Jinja2 模板引擎来创建动态 Web 应用。
Jinja2 是一个非常流行的模板引擎,它可以让你用变量替代模板中的占位符,生成动态的 HTML 页面。它被广泛用于 Web 应用中,以生成用户界面。
在开始之前,确保你已经创建并激活了一个虚拟环境,然后安装 Jinja2:
pip install jinja2
FastAPI 允许你使用任何模板引擎,但 Jinja2 是一个常见的选择。以下是如何在 FastAPI 应用中集成 Jinja2 的步骤:
你可以在 templates/item.html
文件中编写你的模板,例如:
<html>
<head>
<title>Item Details</title>
<link href="{{ url_for('static', path='/styles.css') }}" rel="stylesheet">
</head>
<body>
<h1><a href="{{ url_for('read_item', id=id) }}">Item ID: {{ id }}</a></h1>
</body>
</html>
在这个模板中,我们使用了 url_for
函数来生成静态文件和动态链接的 URL。
在模板中,你可以使用传递给 TemplateResponse
的上下文字典中的值。例如,{{ id }}
将显示从上下文中获取的 id
值。
你可以使用 url_for
函数来引用静态文件,如 CSS、JavaScript 或图片。这使得在模板中引用这些资源变得简单。
在这个示例中,我们将创建一个简单的 FastAPI 应用,它使用 Jinja2 模板引擎来渲染一个欢迎页面。
首先,确保你已经安装了 FastAPI 和 Jinja2:
pip install fastapi[jinja2]
创建一个名为 main.py
的文件,并添加以下代码:
from fastapi import FastAPI, Request
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates
app = FastAPI()
templates = Jinja2Templates(directory="templates")
@app.get("/", response_class=HTMLResponse)
async def read_root(request: Request):
return templates.TemplateResponse(request=request, name="welcome.html", context={"name": "World"})
<html>
<head>
<title>Welcome</title>
</head>
<body>
<h1>Welcome, {{ name }}!</h1>
</body>
</html>
这个示例中,我们定义了一个路由 /
,它使用 welcome.html
模板渲染一个欢迎页面。name
变量从上下文中传递给模板,用于显示欢迎信息。
这个示例展示了如何在 FastAPI 应用中使用 Jinja2 模板和静态文件(如 CSS)。
确保你已经安装了 FastAPI 和 Jinja2:
pip install fastapi[jinja2]
创建一个名为 main.py
的文件,并添加以下代码:
from fastapi import FastAPI, Request
from fastapi.responses import HTMLResponse
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
app = FastAPI()
app.mount("/static", StaticFiles(directory="static"), name="static")
templates = Jinja2Templates(directory="templates")
@app.get("/", response_class=HTMLResponse)
async def read_root(request: Request):
return templates.TemplateResponse(request=request, name="home.html", context={"title": "Home Page"})
在 templates
文件夹中创建一个名为 home.html
的文件,添加以下 HTML 代码:
<html>
<head>
<title>{{ title }}</title>
<link href="{{ url_for('static', path='/style.css') }}" rel="stylesheet">
</head>
<body>
<h1>{{ title }}</h1>
<p>This is a demo page with static CSS.</p>
</body>
</html>
h1 {
color: blue;
}
在这个示例中,我们定义了一个路由 /
,它使用 home.html
模板渲染一个页面,该页面引用了一个静态 CSS 文件。title
变量从上下文中传递给模板,用于设置页面标题。通过 url_for('static', path='/style.css')
,我们能够正确地引用静态文件,使得页面的 h1
标签文字颜色变为蓝色。
这两个示例展示了如何在 FastAPI 应用中使用 Jinja2 模板引擎来渲染动态内容和静态资源,从而创建更加丰富和交互式的 Web 应用。