jinja2는 python flask에 내장되어있는 템플릿 엔진이다.
실습코드
목차
- 템플릿 엔진?
- -1 사용이유
- jinja2 문법
- jinja2 실습 및 추가 문법
템플릿 엔진(templeate engine)?
템플릿 양식과 특정 데이터 모델에 따른 입력 자료를 합성하여 결과 문서를 출력하는 소프트웨어를 말한다. 자료(Data)를 결합하여 페이지를 만들어 내기도 하고 많은 양의 Content를 표현하는 것을 도와준다. 분리되어있는 view code(html)와 data logic code를 합쳐 새로운 html을 만들어주는 역할을 한다.
예를 들어, php에서는 html 문서 사이에 <?php echo name ?> 등을 넣어 동적?인 페이지를 만들 수 있듯이 jinja2에서는 {% %}를 통해 여러 페이지를 만들 수 있다.
사용 이유
- 재사용성이 높다.
- 웹페이지 혹은 웹앱을 만들 때 똑같은 디자인의 페이지에서 보이는 데이터만 바뀌는 경우가 많다. 한 페이지를 템플릿 엔진 문법으로 만들어 놓고 여기에 데이터를 바꿔가면서 렌더링을 해주면 수 백의 페이지들을 나타낼수 있다.
- 예를 들어, 로그인 후 회원정보 페이지에서 id, 생년월일 등 개인정보부분을 제외한 레이아웃 부분들은 동일하다. 이 때, 데이터들을 바꿔가면서 여러 페이지들을 만들 수 있다.
- 유지보수에 용이하다
- 템플릿 엔진을 사용하면 동일한 템플릿을 사용한다는 전제하에 템플릿과 넘겨주는 데이터만 수정하면 된다.
- 코드를 많이 줄일 수 있다.
- 대부분의 템플릿 엔진은 기존의 HTML에 비해서 간단한 문법을 사용한다. 코드가 길어지면 길어질 수록 템플릿 엔진을 사용하면 좋다.
jinja2 문법
- {{ ... }} : 변수나 표현식
- {% ... %} : if나 for같은 제어문
- {% if name %} ... {% elif %} ... {% endif %}
- {% block head%} ... {% endblock %}
- {# ... #} : 주석
jinja2 실습 및 추가 문법
jinja.py
from flask import Flask, render_template
app = Flask(__name__, static_folder='static', template_folder='templates')
@app.route('/hello/')
@app.route('/hello/<name>')
def hello(name=None):
return render_template('hello.html', name=name)
- hello.html에 name변수를 전달해 랜더링 진행
base.html
<!DOCTYPE html>
<html>
<head>
{% block head %}
{% endblock %}
</head>
<body>
{% block body %}
{% endblock %}
</body>
</html>
- hello.html이 이를 상속받는다
- hello.html의 큰 틀이 되는 것이다
hello.html
{% extends 'layout/base.html' %}
{% block head %}
<title>hello</title>
{% endblock %}
{% block body %}
{% if name %}
<h1>Hello, {{ name }} </h1>
{% else %}
<h1>Hello, World</h1>
{% endif %}
{% include 'hello2.html' %}
{% endblock %}
- {% extends 'layout/base.html' %}
- base.html을 상속받는다
- hello.html의 {% block head %} ~ {% endblock %}은 base.html의 {% block head %}{% endblock %}에 들어가게 된다
- {% include 'hello2.html' %}
- 이 부분에 hello2.html을 불러온다
hello2.html
{% if name %}
<h1>Hello2, {{ name }} </h1>
{% else %}
<h1>Hello2, World</h1>
{% endif %}
결과
참고 문서
https://gmlwjd9405.github.io/2018/12/21/template-engine.html
https://ddaaadd.tistory.com/276
'python > Flask' 카테고리의 다른 글
[python][flask]플라스크 기초-redirect & errorhandler (0) | 2022.02.14 |
---|---|
[python][flask]플라스크 기초-템플릿(render_template) (0) | 2022.02.14 |
[python][flask]플라스크 기초-메서드(method) (0) | 2022.02.14 |
[python][flask]플라스크 기초-라우팅 (0) | 2022.02.08 |