플라스크로 나만의 웹 페이지 만들기-03

Intro


이 포스트는 플라스크로 나만의 웹 페이지 만들기 - 02 에 의존합니다. 이전 포스트를 먼저 보시는걸 추천합니다.


Jinja2 템플릿 엔진


신사2 템플릿엔진. 더 자세한 설명을 원한다면 여기로. 영어인건 비밀
플라스크를 설치할때 같이 설치되므로 추가적으로 설치할 것은 없다. 플라스크의 템플릿 파일들은 기본적으로 /templates/디렉토리에 저장한다. 가장 간단한 형태에서 템플릿은 응답 텍스트를 포함하고 있는 파일이다.

다음과 같은 파일을 작성하여 tmplates/user.html형식으로 저장한다.

<h1>Hello, {{ name }}!</h1>

그리고 전에 사용했던 user.py파일을 다음과 같이 수정한다.

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_templateimport하는것을 잊으면 안된다.
플라스크의 render_template함수는 애플리케이션과 Jinja2 템플릿엔진을 통합한다.
애플리케이션을 실행한 화면이다.

Cap 2017-10-16 16-13-01-746.png


변수


user.html에서 {{ name }}부분은 변수를 뜻하며, 렌더링되는 시점에서의 데이터로부터 얻어오는 값을 의미한다. 변수로는 어떠한 타입이라도 인식한다.
심지어 리스트, 딕셔너리, 오브젝트와같은 복합 타입도 인식한다!
변수는 필터를 사용하여 가공할 수 있으며 파이프 기호를 분리자로 하여 변수 이름 이후에 추가한다.
Hello,{{ name|apitalize }}
이 템플릿은 name변수의 첫 문자를 대문자로 한다.


제어구조


Jinja2 에서 제어문의 사용법은 다음과 같다.


{% if user %}
	Hello, {{ user }}!
{% else %}
	Hello, Stranger!!
{% endif %}


<ul>
	{% for comment in comments %}
		<li>{{ comment }}</li>
	{% endfor %}
</ul>

HTML에 제어문을 사용할 수 있다는 것 = 노가다를 줄여준다는 것

Jinja2에는 재미있는 기능중 하나인 메크로(macro)도 있다.
메크로는 파이썬의 ‘함수’의 기능과 비슷하다.


{% macro render_comment(comment) %}
	<li>{{ comment }}</li>
{% endmacro %}

위와같은 파일을 macros.html로 저장해 두고 필요할때 템플릿에 임포트(import)하면 된다.


{% import 'macros.html' as macros %}
<ul>
	{% for comment in comments %}
		{{ macros.render_comment(comment)}}
	{% endfor %}
</ul>

import외 에도 extends으로 상속도 가능하다.


정적 파일


웹 개발 경험이 있다면 알겠지만 파이썬 코드나 템플릿 만으로는 완전한 웹 애플리케이션을 만들수 없다. HTML부터 CSS,JavaScript등과 같은 정적 파일들이 필요하다. 이러한 정적파일들은 기본적으로 /static/디렉토리 아래에 분류하여 저장한다.


다음포스트 - 플라스크로 나만의 웹 페이지 만들기 - 04