Flask Jinja2 템플릿 기본 사용법
Python Flask 애플리케이션을 개발하면서, 사용자에게 보여줄 화면을 만들어야 할 때 Jinja2 템플릿 엔진을 사용하게 됩니다. Jinja2는 Flask의 기본 템플릿 엔진으로, HTML과 같은 정적 파일 내에 동적 데이터를 삽입할 수 있는 강력한 도구를 제공합니다. 이번 포스팅에서는 Jinja2 템플릿의 기본 사용법과 주요 기능을 살펴보겠습니다.
1. Jinja2 템플릿 기본 개념
Jinja2는 다음과 같은 기본 기능을 제공합니다:
- 변수 렌더링: Python 데이터(문자열, 리스트, 딕셔너리 등)를 HTML에 삽입.
- 제어 구조: 조건문과 반복문을 사용해 동적 콘텐츠 생성.
- 필터: 데이터에 특정 처리를 적용.
- 매크로: 재사용 가능한 템플릿 코드 작성.
- 템플릿 상속: 공통 레이아웃을 정의하고 확장 가능.
2. Jinja2 템플릿 환경 설정
Flask 애플리케이션에서 Jinja2 템플릿을 사용하려면, 프로젝트 폴더에 templates
라는 디렉토리를 생성한 후 HTML 파일을 배치합니다. Flask는 자동으로 이 디렉토리를 탐색합니다.
project/
│
├── app.py
└── templates/
├── base.html
└── index.html
예제 Flask 코드
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
user = {"name": "홍길동", "age": 30}
return render_template('index.html', user=user)
if __name__ == '__main__':
app.run(debug=True)
위 코드에서 render_template
함수는 templates
디렉토리에 있는 index.html
파일을 찾아 렌더링합니다.
3. 변수 렌더링
템플릿에서 변수를 렌더링하려면 {{ 변수명 }}
을 사용합니다.
index.html
파일
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>Jinja2 기본</title>
</head>
<body>
<h1>안녕하세요, {{ user.name }}님!</h1>
<p>나이: {{ user.age }}세</p>
</body>
</html>
출력 결과
브라우저에서 확인하면 다음과 같은 결과가 표시됩니다:
안녕하세요, 홍길동님!
나이: 30세
4. 조건문 사용하기
Jinja2는 조건문을 지원합니다. 예를 들어, 사용자의 성별에 따라 다른 메시지를 표시할 수 있습니다.
index.html
업데이트
<body>
{% if user.age > 18 %}
<p>성인입니다.</p>
{% else %}
<p>미성년자입니다.</p>
{% endif %}
</body>
5. 반복문 사용하기
리스트 데이터를 출력할 때 for
문을 사용할 수 있습니다.
예제 코드
@app.route('/fruits')
def fruits():
fruit_list = ["사과", "바나나", "딸기", "포도"]
return render_template('fruits.html', fruits=fruit_list)
fruits.html
<body>
<h1>과일 목록</h1>
<ul>
{% for fruit in fruits %}
<li>{{ fruit }}</li>
{% endfor %}
</ul>
</body>
출력 결과
과일 목록
- 사과
- 바나나
- 딸기
- 포도
6. 필터 사용하기
필터는 템플릿 데이터에 특정 처리를 적용합니다. 예를 들어, 문자열을 대문자로 변환하거나 리스트를 정렬할 수 있습니다.
필터 예제
<p>대문자 이름: {{ user.name | upper }}</p>
<p>나이 곱하기 2: {{ user.age * 2 }}</p>
7. 템플릿 상속
템플릿 상속을 사용하면 공통 레이아웃을 정의하고 이를 확장할 수 있습니다.
base.html
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>{% block title %}기본 제목{% endblock %}</title>
</head>
<body>
<header>
<h1>공통 헤더</h1>
</header>
<main>
{% block content %}{% endblock %}
</main>
<footer>
<p>공통 푸터</p>
</footer>
</body>
</html>
index.html
{% extends 'base.html' %}
{% block title %}홈{% endblock %}
{% block content %}
<h2>메인 콘텐츠</h2>
<p>환영합니다!</p>
{% endblock %}
출력 결과
공통 헤더
메인 콘텐츠
환영합니다!
공통 푸터
결론
이번 포스팅에서는 Jinja2 템플릿의 기본 사용법과 주요 기능을 살펴보았습니다. Jinja2는 강력한 기능을 제공하여 Flask 애플리케이션의 동적 콘텐츠를 쉽게 관리할 수 있습니다.
'Python Flask' 카테고리의 다른 글
Flask와 SQLite 연결하기 (0) | 2025.01.24 |
---|---|
Flask Jinja2 템플릿 - 변수 및 필터 사용법 (0) | 2025.01.23 |
Flask 라우팅과 URL 리다이렉션 처리 (0) | 2025.01.21 |
Flask 동적 라우팅 (URL 매개변수 사용법) (0) | 2025.01.20 |
Flask 라우팅(Routing)의 개념 (0) | 2025.01.19 |