๐¶
๐ ๐ช โ๏ธ ๐ ๐ ๐ ๐ ๐ โฎ๏ธ FastAPI.
โ โ Jinja2๏ธโฃ, ๐ 1๏ธโฃ โ๏ธ ๐บ & ๐ ๐งฐ.
๐ค ๐ ๐ โซ๏ธ ๐ช ๐ ๐ ๐ช โ๏ธ ๐ ๐ FastAPI ๐ธ (๐ ๐).
โ ๐¶
โ jinja2
:
$ pip install jinja2
---> 100%
โ๏ธ Jinja2Templates
¶
- ๐
Jinja2Templates
. - โ
templates
๐ ๐ ๐ ๐ช ๐ค-โ๏ธ โช. - ๐ฃ
Request
๐ข โก ๐ ๏ธ ๐ ๐ ๐จ ๐. - โ๏ธ
templates
๐ โ โ & ๐จTemplateResponse
, ๐ถโโ๏ธrequest
1๏ธโฃ ๐-๐ฒ ๐ซ 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(
request=request, name="item.html", context={"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
.
๐ โน¶
๐ โน, ๐ โ ๐ฏ ๐, โ ๐ ๐ฉบ ๐ ๐.