Jinja 템플릿 엔진 기초 가이드
개요
Jinja는 Python 웹 애플리케이션에서 많이 사용되는 강력한 템플릿 엔진입니다. Django의 템플릿 시스템에서 영감을 받았으며, Python과 유사한 문법을 사용합니다.
Jinja 템플릿이란?
Jinja 템플릿은 기본적으로 텍스트 파일입니다. 이 템플릿은 다양한 형식(HTML, XML, CSV, LaTeX 등)을 생성할 수 있으며, 특정 확장자를 가질 필요는 없습니다(.html, .xml 등 모두 가능).
템플릿의 주요 구성 요소
Jinja 템플릿은 다음과 같은 요소로 구성됩니다:
- 변수(Variables) - 템플릿이 렌더링될 때 실제 값으로 대체됩니다.
- 표현식(Expressions) - 평가되어 출력으로 변환됩니다.
- 태그(Tags) - 템플릿의 로직을 제어합니다.
기본 문법
Jinja의 기본 구분 기호(delimiters)는 다음과 같습니다:
{% ... %}- 문장(Statements) - 제어 구조(for 루프, if 조건문 등){{ ... }}- 표현식(Expressions) - 출력으로 인쇄될 표현식{# ... #}- 주석(Comments) - 템플릿 출력에 포함되지 않는 주석
기본 템플릿 예제
아래는 기본 Jinja 구성을 사용한 간단한 템플릿 예제입니다:
<!DOCTYPE html>
<html lang="en">
<head>
<title>My Webpage</title>
</head>
<body>
<ul id="navigation">
{% for item in navigation %}
<li><a href="{{ item.href }}">{{ item.caption }}</a></li>
{% endfor %}
</ul>
<h1>My Webpage</h1>
{{ a_variable }}
{# 이것은 출력되지 않는 주석입니다 #}
</body>
</html>
주요 기능 설명
1. 변수와 표현식
변수는 {{ variable_name }}와 같이 이중 중괄호 안에 표현되며, 템플릿이 렌더링될 때 해당 변수의 값으로 대체됩니다.
<h1>안녕하세요, {{ user_name }}님!</h1>
2. 제어 구조
Jinja는 다양한 제어 구조를 지원합니다:
For 루프
<ul>
{% for user in users %}
<li>{{ user.username }}</li>
{% endfor %}
</ul>
If 조건문
{% if user.is_authenticated %}
<p>환영합니다, {{ user.username }}!</p>
{% else %}
<p>로그인해주세요.</p>
{% endif %}
3. 필터
필터는 파이프(|) 기호를 사용하여 변수의 출력을 수정할 수 있습니다:
{{ name|capitalize }}
{{ list|join(', ') }}
{{ text|truncate(100) }}
4. 주석
주석은 출력에 포함되지 않습니다:
{# 이 주석은 HTML 출력에 포함되지 않습니다 #}
사용 예제
데이터 전달하기
Python 코드에서 템플릿에 데이터를 전달하는 기본 예제:
from jinja2 import Template
template = Template('안녕하세요, {{ name }}님!')
result = template.render(name='홍길동')
# 결과: '안녕하세요, 홍길동님!'
웹 애플리케이션에서의 사용
Flask와 같은 웹 프레임워크에서는 다음과 같이 사용할 수 있습니다:
@app.route('/')
def index():
return render_template('index.html',
title='홈페이지',
users=['홍길동', '김철수', '이영희'])
템플릿 파일 (index.html):
<!DOCTYPE html>
<html>
<head>
<title>{{ title }}</title>
</head>
<body>
<h1>사용자 목록</h1>
<ul>
{% for user in users %}
<li>{{ user }}</li>
{% endfor %}
</ul>
</body>
</html>
정리
Jinja 템플릿 엔진은:
- 텍스트 기반 템플릿을 사용합니다
- 변수, 표현식, 태그를 포함할 수 있습니다
- 다양한 제어 구조(for, if 등)를 지원합니다
- 필터를 통해 출력을 변환할 수 있습니다
- 주석을 사용할 수 있습니다
- 문법을 커스터마이징할 수 있습니다
Jinja 템플릿은 웹 개발에서 HTML을 동적으로 생성하는 데 매우 유용하며, Python 웹 프레임워크(Flask, Django 등)와 함께 자주 사용됩니다.