Skip to content

📄

👆 💪 ⚙️ 🙆 📄 🚒 👆 💚 ⏮️ 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><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.

🌅 ℹ

🌅 ℹ, 🔌 ❔ 💯 📄, ✅ 💃 🩺 🔛 📄.