Python

[FastAPI] 웹 페이지 구성하기

비번변경 2025. 5. 21. 01:18

개요

FastAPI는 주로 API 개발을 위해 많이 사용하지만, 필요하다면 간단한 웹 페이지를 구성할 수도 있다.

이번 글에서는 FastAPI, Jinja2 Template을 이용해 HTML 웹 페이지를 구성하는 방법을 알아본다.

 

 

설치 필요 라이브러리

Jinja2 템플릿이 필요하기 때문에 pip를 사용해 jinja2를 설치해야 한다.

pip install jinja2

 

 

구성 방법

순서대로 구성을 진행해 보자.

 

1. HTML 만들기

먼저 렌더링 할 HTML을 작성한다. 아래 예시는 간단하게 전달받은 name을 출력하는 예시이다.

<!DOCTYPE html>
<html>
<head>
    <title>Create Market</title>
</head>
<body>
    <h1>Hello, {{ name }}</h1>
</body>
</html>

작성한 템플릿은 templates라는 경로에 저장했다.

2. 코드 구현

- Jinja2Templates 객체 생성

아래와 같이 Jinja2Templates 클래스를 임포트 한 후 템플릿이 저장된 경로를 지정하여 객체를 생성한다.

from fastapi.templating import Jinja2Templates

templates = Jinja2Templates(directory="templates")

 

- 응답 클래스 지정

response_class를 HTMLResponse로 지정한다.

@app.get("/hello/{name}", response_class=HTMLResponse)

 

- Request 선언

템플릿을 반환할 경로 함수에 Request 매개변수를 선언한다

@app.get("/hello/{name}", response_class=HTMLResponse)
async def hello(request: Request, name: str):
	pass

 

- 템플릿 반환

경로 함수에서 TemplateResponse을 렌더링 하고 반환한다. TemplateResponse에는 템플릿의 이름, Request 객체와 Jinja2 템플릿 내에서 사용할 키-값 쌍이 포함된 context 딕셔너리를 전달한다.

 

아래는 구현한 코드의 전체 내용에 해당한다.

from fastapi import FastAPI
from fastapi import Request
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates


app = FastAPI()
templates = Jinja2Templates(directory="templates")


@app.get("/hello/{name}", response_class=HTMLResponse)
async def hello(request: Request, name: str):
    return templates.TemplateResponse(
        request=request, name="index.html", context={"name": name}
    )

 

 

실행 결과

이제 FastAPI를 실행해 보면 의도한 대로 경로 매개변수로 전달받은 name을 출력하는 모습을 확인할 수 있다.

 

 

 

참고 문서

https://fastapi.tiangolo.com/advanced/templates/

 

 

728x90