플라스크로 나만의 웹 페이지 만들기-03
Intro
이 포스트는 플라스크로 나만의 웹 페이지 만들기 - 02 에 의존합니다. 이전 포스트를 먼저 보시는걸 추천합니다.
Jinja2 템플릿 엔진
신사2 템플릿엔진. 더 자세한 설명을 원한다면 여기로. 영어인건 비밀
플라스크를 설치할때 같이 설치되므로 추가적으로 설치할 것은 없다. 플라스크의 템플릿 파일들은 기본적으로 /templates/
디렉토리에 저장한다. 가장 간단한 형태에서 템플릿은 응답 텍스트를 포함하고 있는 파일이다.
다음과 같은 파일을 작성하여 tmplates/user.html
형식으로 저장한다.
<h1>Hello, {{ name }}!</h1>
그리고 전에 사용했던 user.py
파일을 다음과 같이 수정한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def hello():
return '<h1>Hello world!</h1>'
@app.route('/user/<name>')
def user(name):
return render_template('user.html', name=name)
if __name__ == '__main__':
app.run(debug=True)
처음에 render_template
를 import
하는것을 잊으면 안된다.
플라스크의 render_template함수는 애플리케이션과 Jinja2 템플릿엔진을 통합한다.
애플리케이션을 실행한 화면이다.
변수
user.html
에서 {{ name }}
부분은 변수를 뜻하며, 렌더링되는 시점에서의 데이터로부터 얻어오는 값을 의미한다. 변수로는 어떠한 타입이라도 인식한다.
심지어 리스트, 딕셔너리, 오브젝트와같은 복합 타입도 인식한다!
변수는 필터를 사용하여 가공할 수 있으며 파이프 기호를 분리자로 하여 변수 이름 이후에 추가한다.
Hello,{{ name|apitalize }}
이 템플릿은 name
변수의 첫 문자를 대문자로 한다.
제어구조
Jinja2 에서 제어문의 사용법은 다음과 같다.
1
2
3
4
5
6
7
{% if user %}
Hello, {{ user }}!
{% else %}
Hello, Stranger!!
{% endif %}
1
2
3
4
5
6
7
<ul>
{% for comment in comments %}
<li>{{ comment }}</li>
{% endfor %}
</ul>
HTML
에 제어문을 사용할 수 있다는 것 = 노가다를 줄여준다는 것
Jinja2에는 재미있는 기능중 하나인 메크로(macro)도 있다.
메크로는 파이썬의 ‘함수’의 기능과 비슷하다.
1
2
3
4
5
{% macro render_comment(comment) %}
<li>{{ comment }}</li>
{% endmacro %}
위와같은 파일을 macros.html
로 저장해 두고 필요할때 템플릿에 임포트(import)하면 된다.
1
2
3
4
5
6
7
8
{% import 'macros.html' as macros %}
<ul>
{% for comment in comments %}
{{ macros.render_comment(comment)}}
{% endfor %}
</ul>
import
외 에도 extends
으로 상속도 가능하다.
정적 파일
웹 개발 경험이 있다면 알겠지만 파이썬 코드나 템플릿 만으로는 완전한 웹 애플리케이션을 만들수 없다. HTML
부터 CSS
,JavaScript
등과 같은 정적 파일들이 필요하다. 이러한 정적파일들은 기본적으로 /static/
디렉토리 아래에 분류하여 저장한다.