플라스크는 텍스트 기반의 문서를 다루기 위해 Jinja라는 템플릿 엔진을 포함한다. 플라스크가 Jinja와 통합한 주된 이유는 HTML 문서를 생성하기 위해서이다. render_template() 같은 함수는 Jinja 템플릿과 주어진 테스트를 사용해 응답을 만든다.
Jinja는 꼭 HTML 이나 다른 태그 기반의 문서만 사용할 수 있는 것은 아니고, 텍스트 기반이라면 어떤 문서도 만들 수 있다.
다음은 이메일 템플릿의 예시이다.
Date: {{date}}
From: {{from}}
Subject: {{subject}}
To: {{to}}
Content-Type: text/plain
Hello {{name}},
We have received your payment!
Below is the list of items we will deliver for lunch:
{% for item in items %} - {{item['name']}} ({{item['price']}} in Euros)
{% endfor %}
Thank You for your business!
--
Jimmy
Jinja는 두 개의 중괄호로 변수를 표시한다. 런타임에 Jinja에 전달될 수 있다면 어떤 것도 변수가 될 수 있다.
파이썬의 if와 for도 다음과 같은 표기로 템플릿 내에 직접 사용할 수 있다.
{% for x in y % }...{% endfor %}
{% if x %}...{% endif %}
따라서 다음은 이메일 템플릿을 이용해 이메일 텍스트를 생성하는 코드이다.
from datetime import datetime
from jinja2 import Template
from email.utils import format_datetime
data = {
'date': format_datetime(datetime.now()),
'to': 'to@example.com',
'from': 'from@example.com',
'subject': 'example subject',
'name': 'Jimmy',
'items': [{'name': 'Burger', 'price': 4.5},
{'name': 'Fries', 'price': 2},
{'name': 'Coke', 'price': 1}]
}
def render_email(**data):
with open('email_template.eml') as f:
template = Template(f.read())
return template.render(**data)
print(render_email(**data))
실행 결과
다음 도서를 참고하였습니다.
https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=191830482
'About > Flask' 카테고리의 다른 글
[Flask] Flask-SQLAlchemy 사용해보기 (1) | 2021.12.30 |
---|---|
[Flask] 에러 처리 (사용자 정의 에러 핸들러, JSON 에러 핸들러) (0) | 2021.12.13 |
[Python] Flask Signal (Blinker) (0) | 2021.09.25 |
[Python] Flask 전역 공간 (Flask.g) (0) | 2021.09.25 |
[Python] Flask Session 저장, 불러오기, 삭제 (0) | 2021.09.05 |