Flask – 템플릿
특정 URL에 바인딩 된 함수의 출력을 HTML 형식으로 반환 할 수 있습니다. 예를 들어 다음 스크립트에서hello() 함수가 렌더링됩니다 ‘Hello World’ 와 <h1> 태그가 붙어 있습니다.
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return '<html><body><h1>Hello World</h1></body></html>'
if __name__ == '__main__':
app.run(debug = True)
그러나 Python 코드에서 HTML 콘텐츠를 생성하는 것은 번거 롭습니다. 특히 변수 데이터와 조건부 또는 루프와 같은 Python 언어 요소를 넣어야 할 때 더욱 그렇습니다. 이를 위해서는 HTML에서 자주 이스케이프해야합니다.
이것이 하나의 이점을 얻을 수있는 곳입니다. Jinja2Flask의 기반이되는 템플릿 엔진. 함수에서 하드 코드 HTML을 반환하는 대신 HTML 파일은render_template() 함수.
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return render_template(‘hello.html’)
if __name__ == '__main__':
app.run(debug = True)
Flask는이 스크립트가있는 동일한 폴더의 templates 폴더에서 HTML 파일을 찾으려고합니다.
- 응용 프로그램 폴더
- Hello.py
- templates
- hello.html
용어 ‘web templating system’가변 데이터를 동적으로 삽입 할 수있는 HTML 스크립트를 디자인하는 것을 말합니다. 웹 템플릿 시스템은 템플릿 엔진, 일종의 데이터 소스 및 템플릿 프로세서로 구성됩니다.
플라스크 사용 jinja2템플릿 엔진. 웹 템플릿에는 템플릿이 렌더링 될 때 값이 대체되는 변수 및 표현식 (이 경우 Python 표현식)에 대한 HTML 구문이 산재되어 있습니다.
다음 코드는 hello.html 템플릿 폴더에 있습니다.
<!doctype html>
<html>
<body>
<h1>Hello {{ name }}!</h1>
</body>
</html>
다음으로 Python 셸에서 다음 스크립트를 실행합니다.
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/hello/<user>')
def hello_name(user):
return render_template('hello.html', name = user)
if __name__ == '__main__':
app.run(debug = True)
개발 서버가 실행되기 시작하면 브라우저를 열고 URL을 다음과 같이 입력하십시오. http://localhost:5000/hello/mvl
그만큼 variable URL의 일부가 {{ name }} 자리 표시 자.
그만큼 jinja2 템플릿 엔진은 HTML에서 이스케이프하기 위해 다음 구분 기호를 사용합니다.
- 문에 대한 {% ... %}
- 템플릿 출력으로 인쇄 할 표현식의 경우 {{...}}
- 템플릿 출력에 포함되지 않은 주석의 경우 {# ... #}
- # ... ## for Line Statements
다음 예에서는 템플릿에서 조건문을 사용하는 방법을 보여줍니다. URL 규칙은hello()함수는 정수 매개 변수를받습니다. 그것은에 전달됩니다hello.html주형. 그 안에서 수신 된 수 (마크)의 값이 비교되고 (50보다 크거나 작음) 이에 따라 HTML이 조건부로 렌더링됩니다.
Python 스크립트는 다음과 같습니다.
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/hello/<int:score>')
def hello_name(score):
return render_template('hello.html', marks = score)
if __name__ == '__main__':
app.run(debug = True)
HTML 템플릿 스크립트 hello.html 다음과 같습니다-
<!doctype html>
<html>
<body>
{% if marks>50 %}
<h1> Your result is pass!</h1>
{% else %}
<h1>Your result is fail</h1>
{% endif %}
</body>
</html>
조건문은 if-else 과 endif 구분 기호로 묶여 있습니다. {%..%}.
Python 스크립트를 실행하고 URL을 방문합니다. http://localhost/hello/60 그리고 http://localhost/hello/30 조건부로 변경되는 HTML 출력을 확인합니다.
Python 루프 구조는 템플릿 내에서도 사용할 수 있습니다. 다음 스크립트에서result() 함수는 사전 객체를 템플릿으로 보냅니다. results.html URL http://localhost:5000/result 브라우저에서 열립니다.
템플릿 부분 result.html 고용 for loop 사전 객체의 키 및 값 쌍 렌더링 result{} HTML 테이블의 셀로.
Python 셸에서 다음 코드를 실행합니다.
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/result')
def result():
dict = {'phy':50,'che':60,'maths':70}
return render_template('result.html', result = dict)
if __name__ == '__main__':
app.run(debug = True)
다음 HTML 스크립트를 다른 이름으로 저장하십시오. result.html 템플릿 폴더에 있습니다.
<!doctype html>
<html>
<body>
<table border = 1>
{% for key, value in result.items() %}
<tr>
<th> {{ key }} </th>
<td> {{ value }} </td>
</tr>
{% endfor %}
</table>
</body>
</html>
여기에서 다시 한 번 For 루프는 {% .. %}로 묶여 있지만 표현식은 key and value 안에 넣어 {{ }}.
개발이 시작되면 http://localhost:5000/result 브라우저에서 다음 출력을 얻습니다.