Вам нужно использовать FastAPI TemplateResponse
(на самом деле Starlette):
from fastapi import Request
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
app.mount("/static", StaticFiles(directory="static"), name="static")
templates = Jinja2Templates(directory="package_docs")
@app.get("/items/{id}")
async def example(request: Request):
return templates.TemplateResponse("index.html", {"request": request})
Request
как часть пар ключ-значение в контексте для Jinja2. Итак, вы также должны объявить его как параметр запроса. и вам нужно указать файл html, который вы хотите отобразить с помощью Jinja ("your.html", {"request": request})
Также, чтобы напрямую вернуть HTMLResponse, вы можете использовать HTMLResponse
from fastapi.responses
from fastapi.responses import HTMLResponse
@app.get("/items/", response_class=HTMLResponse)
async def read_items():
return """
<html>
<head>
<title></title>
</head>
<body>
</body>
</html>
Подробнее о настраиваемом ответе можно узнать из Пользовательские ответы FastAPI