on
[Flask] render_template로 html 페이지 반환
[Flask] render_template로 html 페이지 반환
728x90
이전 포스팅에서는 Flask 웹서버로 접속했을 때 "Hello World!" 문구를 반환(출력)하도록 했다.
kimcoder.tistory.com/254
물론 문자열이 아닌 flask 서버 내의 html 문서를 반환할 수도 있는데,
이를 가능하게 해주는 render_template 메소드를 이번 포스팅에서 간략하게 소개하고자 한다.
이번 예제에 필요한 프로젝트 구성이다.
매우 간단한 구성이며, app_copy.py는 이번 예제와 무관하므로 언급하지 않을 것이다.
그리고 태그로 데이터를 Flask 서버로 전송하기 위해 jsp파일도 준비했다.
평범한 html 파일로 준비해도 상관없다.
submit 버튼을 눌러 form 태그로 성공적으로 전송했다면, /test로 name이 각각 "a", "b" 인 데이터가 들어왔을 것이다.
GET, POST 형식 모두 전송받을 수 있게 methods에도 GET, POST를 추가해준 모습이다.
Flask 서버에서는 request.form['name'] 으로 데이터를 받을 수 있는데, name은 form 태그에서 지정한 name과 일치시킨다.
마지막으로 이번 포스팅의 주인공인 render_template 메소드를 리턴하면 된다.
render_template 메소드에 인자를 넣을 때 유의해야 할 사항들이 있다.
첫 번째 인자는 templates 디렉토리에 있는 html 파일 경로값이 들어가야 하는데, 경로를 적을 때 templates는 작성하지 않는다. 참고로, templates 디렉토리가 프로젝트 내에 없다면 여러분들이 직접 생성하면 된다.
두 번째 인자부터는 첫 번째 인자로 지정한 html 파일 내에서 사용할 변수를 지정하면 된다.
이 예제에서는 좌항과 우항이 같아서(a=a) 헷갈릴 수 있는데, 좌항 부분은 html 내에서 사용할 변수 이름이고, 우항 부분은 python의 변수 이름이다.
from flask import Flask, render_template, request app = Flask(__name__) @app.route('/') def home(): return 'Home!' @app.route('/test', methods=['POST','GET']) def test(): a = int(request.form['a']) b = int(request.form['b']) return render_template('sample.html',a=a, b=b) if __name__ == '__main__': app.run(host='0.0.0.0')
단순히 변수를 출력할 것이라면 중괄호를 2번 감싸준다. -> {{ }}
그리고, 조건문이나 반복문같은 로직을 수행할 때는 {% %}로 감싸준다.
그리고 if문, for문 뒤에 각각 {% endif %}, {% endfor %}를 작성해줘야 한다.
이러한 표현식들은 Flask에서는 Jinja2라는 템플릿 엔진을 제공하기 때문에 사용 가능한 것이다.
Insert title here a = {{a}} b = {{b}} {% if a >= 60 %} PASS {% else %} FAIL {% endif %} {% for i in range(b) %} {{i}} {% endfor %}
실행 결과
728x90
from http://kimcoder.tistory.com/255 by ccl(A) rewrite - 2021-02-22 21:26:13