Flask Jinja2 템플릿: 변수 및 필터 사용법
Flask는 웹 애플리케이션 개발을 간단하게 만들어주는 Python 기반 프레임워크입니다. Flask에서 HTML 템플릿을 다룰 때 Jinja2 템플릿 엔진을 사용합니다. 이번 포스팅에서는 Jinja2 템플릿에서 변수와 필터를 사용하는 방법을 예제와 함께 자세히 설명하겠습니다.
1. Jinja2 템플릿 변수란?
Jinja2 템플릿 변수는 Python에서 전달된 데이터를 HTML에 삽입할 때 사용됩니다. 템플릿 변수는 {{ }}
구문을 사용하여 HTML 파일에서 선언합니다.
기본 변수 사용법
Python 코드에서 템플릿에 데이터를 전달하면 HTML 템플릿에서 해당 데이터를 표시할 수 있습니다.
# app.py
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
name = "소프트웨어 공장"
return render_template('index.html', name=name)
if __name__ == '__main__':
app.run(debug=True)
<!-- templates/index.html -->
<!DOCTYPE html>
<html>
<head>
<title>Flask Jinja2 예제</title>
</head>
<body>
<h1>안녕하세요, {{ name }}!</h1>
</body>
</html>
결과적으로 브라우저에는 안녕하세요, 소프트웨어 공장!
라는 메시지가 출력됩니다.
2. Jinja2 필터란?
필터는 템플릿 변수의 값을 변환하거나 조작하는 데 사용됩니다. 필터는 파이프(|
) 기호를 사용하여 적용합니다. Jinja2에서 기본적으로 제공하는 필터는 여러 가지가 있으며, 필요에 따라 사용자 정의 필터도 만들 수 있습니다.
기본 필터 사용법
upper
필터
문자열을 대문자로 변환합니다.
<p>{{ name|upper }}</p>
위의 필터를 사용하면 소프트웨어 공장
가 출력됩니다.
lower
필터
문자열을 소문자로 변환합니다.
<p>{{ name|lower }}</p>
결과는 소프트웨어 공장
입니다.
length
필터
리스트, 문자열, 또는 기타 데이터의 길이를 반환합니다.
<p>이름의 길이: {{ name|length }}</p>
결과는 18
입니다.
3. 필터와 변수 결합하기
여러 필터를 결합하여 사용할 수도 있습니다. 예를 들어, 아래 코드는 문자열을 대문자로 변환한 후 길이를 반환합니다.
<p>{{ name|upper|length }}</p>
결과는 18
입니다.
4. 사용자 정의 필터 만들기
필요한 경우 Flask에서 사용자 정의 필터를 정의하여 사용할 수 있습니다.
사용자 정의 필터 예제
다음은 문자열을 거꾸로 뒤집는 사용자 정의 필터입니다.
# app.py
from flask import Flask, render_template
app = Flask(__name__)
@app.template_filter('reverse')
def reverse_string(s):
return s[::-1]
@app.route('/')
def index():
name = "소프트웨어 공장"
return render_template('index.html', name=name)
if __name__ == '__main__':
app.run(debug=True)
<!-- templates/index.html -->
<p>이름을 거꾸로: {{ name|reverse }}</p>
결과는 oidutS nohtyP peeD
가 출력됩니다.
5. 템플릿 변수와 필터 조합 예제
리스트 데이터 처리
Jinja2 템플릿 변수는 단순한 문자열 뿐만 아니라 리스트와 같은 복잡한 데이터 구조도 처리할 수 있습니다.
# app.py
@app.route('/items')
def items():
items = ["Python", "Flask", "Jinja2"]
return render_template('items.html', items=items)
<!-- templates/items.html -->
<ul>
{% for item in items %}
<li>{{ item|upper }}</li>
{% endfor %}
</ul>
결과적으로 다음과 같은 HTML이 렌더링됩니다:
<ul>
<li>PYTHON</li>
<li>FLASK</li>
<li>JINJA2</li>
</ul>
6. 템플릿 변수의 안전한 출력
Jinja2는 기본적으로 HTML에서 사용자 입력을 출력할 때 보안을 강화하기 위해 모든 데이터에 대해 HTML escaping을 적용합니다.
HTML escaping 예제
# app.py
@app.route('/safe')
def safe():
unsafe_string = "<script>alert('XSS')</script>"
return render_template('safe.html', unsafe_string=unsafe_string)
<!-- templates/safe.html -->
<p>{{ unsafe_string }}</p>
위 코드는 <script>
태그를 실제 HTML로 출력하지 않고, 문자열로 처리하여 안전하게 렌더링합니다.
출력 결과:
<p><script>alert('XSS')</script></p>
마치며
Jinja2 템플릿에서 변수를 사용하고 필터를 적용하는 방법은 Flask 웹 애플리케이션 개발의 핵심 요소입니다. 이 포스팅에서는 기본 변수 사용법부터 다양한 필터, 사용자 정의 필터까지 다뤄보았습니다. 다음 포스팅에서는 Jinja2의 제어 구조와 매크로를 다뤄보겠습니다.
Flask와 Jinja2를 활용한 실습으로 더욱 풍성한 웹 애플리케이션을 만들어보세요!
'Python > Python Flask' 카테고리의 다른 글
Flask와 SQLite 연결하기 (0) | 2025.09.01 |
---|---|
Flask Jinja2 템플릿 상속으로 템플릿 구조화하기 (0) | 2025.08.31 |
Flask Jinja2 템플릿 기본 사용법 (0) | 2025.08.29 |
Python Flask 라우팅과 URL 리다이렉션 처리 (0) | 2025.08.28 |
Python Flask 동적 라우팅 (URL 매개변수 사용법) (0) | 2025.08.27 |