Python Flask

Flask Jinja2 템플릿 기본 사용법

PyExplorer 2025. 1. 22. 09:01
728x90

Flask Jinja2 템플릿 기본 사용법

Python Flask 애플리케이션을 개발하면서, 사용자에게 보여줄 화면을 만들어야 할 때 Jinja2 템플릿 엔진을 사용하게 됩니다. Jinja2는 Flask의 기본 템플릿 엔진으로, HTML과 같은 정적 파일 내에 동적 데이터를 삽입할 수 있는 강력한 도구를 제공합니다. 이번 포스팅에서는 Jinja2 템플릿의 기본 사용법과 주요 기능을 살펴보겠습니다.


1. Jinja2 템플릿 기본 개념

Jinja2는 다음과 같은 기본 기능을 제공합니다:

  1. 변수 렌더링: Python 데이터(문자열, 리스트, 딕셔너리 등)를 HTML에 삽입.
  2. 제어 구조: 조건문과 반복문을 사용해 동적 콘텐츠 생성.
  3. 필터: 데이터에 특정 처리를 적용.
  4. 매크로: 재사용 가능한 템플릿 코드 작성.
  5. 템플릿 상속: 공통 레이아웃을 정의하고 확장 가능.

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 애플리케이션의 동적 콘텐츠를 쉽게 관리할 수 있습니다.

728x90