๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Back-end & Server/FastAPI

[FastAPI] Template

728x90
๋ฐ˜์‘ํ˜•

 

๐Ÿฐ FastAPI ๊ณต์‹๋ฌธ์„œ๋ฅผ ๋ณด๋ฉด์„œ ๊ฐœ์ธ์ ์œผ๋กœ ์ •๋ฆฌํ•œ ๊ธ€ ์ž…๋‹ˆ๋‹ค.

 

html์— jinja2 Template์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. context๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŽธํ•˜๊ฒŒ ํŽ˜์ด์ง€๋ฅผ ๊พธ๋ฐ€ ์ˆ˜ ์žˆ๋‹ค.

pip install jinja2

 

templates ํด๋”์™€ static ํด๋”๋ฅผ ๋งŒ๋“ ๋‹ค.

templates ํด๋”์—๋Š” html ํŒŒ์ผ์„ static ํด๋”์—๋Š” ์ •์  ํŒŒ์ผ์„ ๋„ฃ๋Š”๋‹ค.

<html>

<head>
    <title>Item Details</title>
    <link href="{{ url_for('static', path='css/index.css') }}" rel="stylesheet">
</head>

<body>
    <h1>Item ID: {{ id }}</h1>
</body>

</html>

 

StaticFiles๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •์  ํŒŒ์ผ(css, js, img, ...)์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

StaticFiles๋ฅผ importํ•˜๊ณ  app์— ํŠน์ •๊ฒฝ๋กœ์— StaticFiles() ์ธ์Šคํ„ด์Šค๋ฅผ Mountํ•œ๋‹ค.

from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles

app = FastAPI()

app.mount("/static", StaticFiles(directory="static"), name="static")

 

 

index.css

h1 {
    color: green;
}

 

์ด์ œ main.py๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.

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="index.html", context={"id": id}
    )

 

๋ฐ˜ํ™˜์„ template ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด html ํŒŒ์ผ, context, request์™€ ํ•จ๊ป˜ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

context ๊ฐ’์„ ์‚ฌ์šฉํ•ด html์—์„œ for, if, ๋ณ€์ˆ˜ ๋“ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

728x90
๋ฐ˜์‘ํ˜•

'Back-end & Server > FastAPI' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€