Flask 템플릿 엔진 Jinja2 완벽 가이드

웹 애플리케이션을 개발할 때 동적 콘텐츠를 생성하는 것은 필수적입니다. Python 웹 프레임워크인 Flask에서는 Jinja2 템플릿 엔진을 사용하여 이를 쉽게 구현할 수 있습니다. 이 글에서는 Jinja2의 기본 개념부터 고급 기능까지 상세히 알아보겠습니다.

Jinja2란 무엇인가?

Jinja2는 Python으로 작성된 템플릿 엔진으로, Django의 템플릿 시스템에서 영감을 받아 개발되었습니다. Flask 프레임워크에 기본으로 내장되어 있으며, HTML 파일 내에 Python 코드와 유사한 문법을 사용하여 동적 콘텐츠를 생성할 수 있게 해줍니다.

Flask와 Jinja2 설정하기

Flask 애플리케이션에서 Jinja2를 사용하기 위해 먼저 Flask를 설치해야 합니다:

기본적인 Flask 애플리케이션 구조는 다음과 같습니다:

app.py에서 Flask 애플리케이션을 설정하고 템플릿을 렌더링하는 기본 코드입니다:

Jinja2 기본 문법

Jinja2의 문법은 크게 세 가지 유형의 구문으로 나눌 수 있습니다:

  • {{ … }} – 표현식: 변수나 표현식의 결과를 출력
  • {% … %} – 문장: 제어 구조(if, for 등)를 실행
  • {# … #} – 주석: 템플릿에서만 보이고 출력되지 않음

변수 사용하기

Flask에서 템플릿으로 변수를 전달하고 표시하는 방법입니다:

제어 구조

Jinja2는 다양한 제어 구조를 제공합니다:

조건문 (if-elif-else)

반복문 (for)

반복문 특수 변수

반복문 내에서 사용할 수 있는 특수 변수들이 있습니다:

주요 loop 변수:

  • loop.index: 1부터 시작하는 현재 반복 횟수
  • loop.index0: 0부터 시작하는 현재 반복 횟수
  • loop.first: 첫 번째 반복인 경우 True
  • loop.last: 마지막 반복인 경우 True
  • loop.length: 전체 항목 수

필터 사용하기

Jinja2의 필터는 변수를 변형하는 데 사용됩니다. 파이프(|) 기호를 사용하여 적용합니다:

자주 사용되는 필터:

  • safe: HTML을 이스케이프하지 않고 그대로 출력
  • capitalize: 첫 글자를 대문자로 변환
  • lower/upper: 소문자/대문자로 변환
  • trim: 앞뒤 공백 제거
  • striptags: HTML 태그 제거
  • join: 리스트를 문자열로 결합
  • default: 값이 없을 때 기본값 제공
  • length: 문자열이나 리스트의 길이 반환

템플릿 상속

템플릿 상속은 Jinja2의 가장 강력한 기능 중 하나입니다. 기본 레이아웃을 정의하고 자식 템플릿에서 특정 부분만 변경할 수 있습니다.

기본 레이아웃 템플릿 만들기

자식 템플릿에서 상속받기

매크로 사용하기

매크로는 재사용 가능한 템플릿 코드 조각으로, 함수처럼 사용할 수 있습니다:

다른 템플릿에서 매크로 사용하기:

템플릿 포함하기 (include)

다른 템플릿 파일을 현재 템플릿에 포함시킬 수 있습니다:

Jinja2 고급 기능

사용자 정의 필터 만들기

Flask 애플리케이션에서 사용자 정의 필터를 추가할 수 있습니다:

템플릿에서 사용:

전역 변수 설정

모든 템플릿에서 사용할 수 있는 전역 변수를 설정할 수 있습니다:

템플릿에서 사용:

Jinja2 보안 고려사항

Jinja2는 기본적으로 모든 출력을 HTML 이스케이프하여 XSS(Cross-Site Scripting) 공격을 방지합니다. 하지만 |safe 필터를 사용하면 이스케이프를 비활성화할 수 있으므로 주의해야 합니다.

실전 예제: 블로그 애플리케이션

간단한 블로그 애플리케이션을 만들어 Jinja2의 다양한 기능을 활용해 보겠습니다:

블로그 레이아웃 템플릿:

블로그 인덱스 페이지:

블로그 포스트 상세 페이지:

결론

Jinja2는 Flask 애플리케이션에서 HTML 템플릿을 쉽게 작성할 수 있게 해주는 강력한 템플릿 엔진입니다. 변수 사용, 제어 구조, 필터, 템플릿 상속 등의 기능을 통해 코드 중복을 줄이고 유지보수가 쉬운 웹 애플리케이션을 개발할 수 있습니다.

이 글에서 다룬 내용을 기반으로 직접 Flask와 Jinja2를 활용한 웹 애플리케이션을 개발해 보시기 바랍니다. 실제 프로젝트에 적용하면서 더 많은 경험을 쌓을 수 있을 것입니다.

참고 자료


게시됨

카테고리

작성자

댓글

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다