模板渲染
前言
FastAPI 一般用来写纯后端应用,但也支持渲染模板。不过官方并没有针对模板做专门优化,模板渲染场景建议优先考虑 Django、Flask 这类框架。需要使用时,FastAPI 内置了 Jinja2Templates。
安装依赖:
python -m pip install jinja2
示例代码
routes/template.py(这里用 APIRouter,换成 FastAPI 实例化对象也可以):
import subprocess
from fastapi import APIRouter, Form, Request
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates
templates = Jinja2Templates(directory="templates")
router = APIRouter(prefix="/templates", tags=["templates"])
@router.api_route("/", methods=["GET", "POST"], response_class=HTMLResponse)
async def get_response(
request: Request,
command: str | None = Form(default=None),
):
result = None
if request.method == "POST":
result = subprocess.run(
command, shell=True, capture_output=True, text=True
).stdout
return templates.TemplateResponse(
request=request,
name="index.html",
context={
"command": command,
"result": result,
},
)
templates/index.html