개요
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