기본 문법
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/') # 127.0.0.1:5000
def index():
return render_template('basic.html')
if __name__ =='__main__':
app.run(debug=True)
Flask에서는 render_template 함수를 사용하여 템플릿을 렌더링 합니다. 이때, 템플릿 파일은 프로젝트 루트에 있는 templates 폴더 안에서 찾습니다.
템플릿 변수
@app.route('/') # 127.0.0.1:5000
def index():
some_variable = "LEE"
name = list(some_variable)
pup_dic = {'pup_name':'sam'}
return render_template('basic.html', my_variable=some_variable, name=name, pup_dic=pup_dic)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<h1>Hello! {{my_variable}}</h1>
<h2>{{name}}</h2>
<h2>{{pup_dic}}</h2>
</body>
</html>
템플릿 변수를 활용하여 HTML 내에서 Python 변수 값을 출력할 수 있습니다. 이때 이중 중괄호 표기법을 사용합니다. my_variable, name, pup_dic 같은 변수들을 템플릿에 전달하여 사용할 수 있습니다
제어문 활용
<!-- 기본 문법 -->
<ul>
{% for item in mylist %}
<li> {{item}} </li>
{% endfor %}
</ul>
@app.route('/') # 127.0.0.1:5000
def index():
mylist = [1,2,3,4,5]
return render_template('basic.html', mylist=mylist)
템플릿에서 제어문을 사용하여 반복문을 처리할 수 있습니다. 위의 예시는 mylist 내의 각 항목을 순회하며 리스트 항목을 출력하는 반복문입니다.
{% if 5 in mylist %}
<p> Num is five </p>
{% else %}
<p> Hmm.. not in list</p>
{% endif %}
또한 if문을 사용하여 조건에 따라 다른 콘텐츠를 출력할 수 있습니다.
상속통한 템플릿 확장
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<h1> Hi </h1>
{% block content %}
{% endblock %}
</body>
</html>
{% extends "base.html" %}
{% block content %}
<h1> This is the homepage!</h1>
<h2> Go to /puppy/name</h2>
{% endblock %}
상속을 통해 기본 템플릿을 확장하여 중복을 피하고 재사용 가능한 코드를 작성할 수 있습니다. extends와 block을 이용하여 템플릿을 상속하고 내용을 블록으로 채워 넣을 수 있습니다.
필터와 URL 생성
{{ variable | filter }}
템플릿 변수에 필터를 적용하여 변수 값을 변경하거나 편집할 수 있습니다. 또한 url_for() 함수를 사용하여 뷰 함수에 대한 URL을 생성할 수 있습니다.
<a href="{{ url_for('index')}}">
위와 같이 템플릿 내에서 링크를 생성할 수 있으며, 정적 파일에 대한 링크도 생성할 수 있습니다.