Jinja는 python flask 패키지에 내장된 템플릿 엔진이다. 개발자가 동적으로 변하는 웹 페이지를 쉽게 구현할 수 있도록 도와준다. 고정적으로 출력되어야 할 서식 html코드가 존재하고 동적으로 변해야할 자리는 jinja2문법으로 비워둔다. 이후 클라이언트가 웹 브라우저를 통해 엔드포인트에 접근하면 아까 비워둔 자리에 값을 설정하여 클라이언트에게 출력한다. 이처럼 고정적인 행위와 변해야할 행위를 쉽게 할 수 있다는 장점이 있다.
<!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>
jinja 템플릿 문법은 크게 두가지로 구분할 수 있음
{{ ... }}
: 변수나 표현식의 결과를 출력하는 구분자(delimeter)
{% ... %}
: if
문이나 for
문 같은 제어문을 할당하는 구분자(delimeter)
( 구분자 : jinja 템플릿 문법임을 구분하는 용도 )
만약 item.href
로 접근하는 경우에는 item 객체 내에서 href 라는 속성이 있는지 먼저 확인한 후, 없을 경우 href 라는 객체가 있는지 확인한다.
반면에 item['href']
로 접근하는 경우에는 item 객체 내에서 href 라는 객체가 있는지 먼저 확인한 후, 없을 경우에 href 라는 속성이 있는지 확인한다.
즉, .으로 접근하는 경우 속성->객체 확인
'으로 접근하는 경우 객체->속성 확인
{% for <개별요소> in <리스트> %}
<실행코드>
{% endfor %}
예시
{% for item in navigation %}
<li><a href="{{ item.href }}">{{ item.caption }}</a></li>
{% endfor %}
시작시에는 for
종료시에는 endfor
를 쓴다.
{% if <조건> %}
<실행코드>
{% elif <조건> %}
<실행코드>
{% else %}
<실행코드>
{% endif %}