📄¶
👆 💪 ⚙️ 🙆 📄 🚒 👆 💚 ⏮️ 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(
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><a href="{{ url_for('read_item', id=id) }}">Item ID: {{ id }}</a></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><a href="{{ url_for('read_item', id=id) }}">Item ID: {{ id }}</a></h1>
</body>
</html>
👉 🖼, ⚫️ 🔜 🔗 🎚 📁 static/styles.css ⏮️:
h1 {
color: green;
}
& ↩️ 👆 ⚙️ StaticFiles, 👈 🎚 📁 🔜 🍦 🔁 👆 FastAPI 🈸 📛 /static/styles.css.
🌅 ℹ¶
🌅 ℹ, 🔌 ❔ 💯 📄, ✅ 💃 🩺 🔛 📄.