๐¶
๐ ๐ช โ๏ธ ๐ ๐ ๐ ๐ ๐ โฎ๏ธ FastAPI.
โ โ Jinja2๏ธโฃ, ๐ 1๏ธโฃ โ๏ธ ๐บ & ๐ ๐งฐ.
๐ค ๐ ๐ โซ๏ธ ๐ช ๐ ๐ ๐ช โ๏ธ ๐ ๐ FastAPI ๐ธ (๐ ๐).
โ ๐¶
โ jinja2:
$ pip install jinja2
---> 100%
โ๏ธ Jinja2Templates¶
- ๐ Jinja2Templates.
- โ templates๐ ๐ ๐ ๐ช ๐ค-โ๏ธ โช.
- ๐ฃ Request๐ข โก ๐ ๏ธ ๐ ๐ ๐จ ๐.
- โ๏ธ templates๐ โ โ & ๐จTemplateResponse, ๐ถโโ๏ธrequest1๏ธโฃ ๐-๐ฒ ๐ซ Jinja2๏ธโฃ "๐".
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("/items/{id}", response_class=HTMLResponse)
async def read_item(request: Request, id: str):
    return templates.TemplateResponse("item.html", {"request": request, "id": id})
Note
๐ ๐ ๐ โ๏ธ ๐ถโโ๏ธ request ๐ ๐-๐ฒ ๐ซ ๐ Jinja2๏ธโฃ. , ๐ โ๏ธ ๐ฃ โซ๏ธ ๐ โก ๐ ๏ธ.
Tip
๐ฃ response_class=HTMLResponse ๐ฉบ ๐ ๐ ๐ช ๐ญ ๐ ๐จ ๐ ๐ธ.
๐ก โน
๐ ๐ช โ๏ธ from starlette.templating import Jinja2Templates.
FastAPI ๐ ๐ starlette.templating fastapi.templating ๐ช ๐, ๐ฉโ๐ป. โ๏ธ ๐
 ๐ช ๐จ ๐ ๐ โช๏ธโก๏ธ ๐. ๐ โฎ๏ธ Request & StaticFiles.
โ ๐¶
โคด๏ธ ๐ ๐ช โ ๐ templates/item.html โฎ๏ธ:
<html>
<head>
    <title>Item Details</title>
    <link href="{{ url_for('static', path='/styles.css') }}" rel="stylesheet">
</head>
<body>
    <h1>Item ID: {{ id }}</h1>
</body>
</html>
โซ๏ธ ๐ ๐ฆ id โ โช๏ธโก๏ธ "๐" dict ๐ ๐ถโโ๏ธ:
{"request": request, "id": id}
๐ & ๐ป ๐¶
& ๐ ๐ช โ๏ธ url_for() ๐ ๐, & โ๏ธ โซ๏ธ, ๐ผ, โฎ๏ธ StaticFiles ๐ ๐.
<html>
<head>
    <title>Item Details</title>
    <link href="{{ url_for('static', path='/styles.css') }}" rel="stylesheet">
</head>
<body>
    <h1>Item ID: {{ id }}</h1>
</body>
</html>
๐ ๐ผ, โซ๏ธ ๐ ๐ ๐ ๐ static/styles.css โฎ๏ธ:
h1 {
    color: green;
}
& โฉ๏ธ ๐ โ๏ธ StaticFiles, ๐ ๐ ๐ ๐ ๐ฆ ๐ ๐ FastAPI ๐ธ ๐ /static/styles.css.
๐ โน¶
๐ โน, ๐ โ ๐ฏ ๐, โ ๐ ๐ฉบ ๐ ๐.