본문 바로가기
  • 실행력이 모든걸 결정한다
Flask

[Flask] render_template로 html 페이지 반환

by 김코더 김주역 2021. 2. 22.
반응형

이전 포스팅에서는 Flask 웹서버로 접속했을 때 "Hello World!" 문구를 반환(출력)하도록 했다.

kimcoder.tistory.com/254

 

[Flask] Flask는 무엇인가? + Flask 기초

1. Flask란? Flask는 파이썬 기반 웹 프레임워크중 하나이다. 자바가 아닌 파이썬으로도 웹 서버를 만들 수 있다는 의미이다. 자바 기반 웹 프레임워크로는 대표적으로 Spring이 있듯이, 파이썬 기반

kimcoder.tistory.com

 

 

물론 문자열이 아닌 flask 서버 내의 html 문서를 반환할 수도 있는데,

이를 가능하게 해주는 render_template 메소드를 이번 포스팅에서 간략하게 소개하고자 한다.

 

이번 예제에 필요한 프로젝트 구성이다.

 

매우 간단한 구성이며, app_copy.py는 이번 예제와 무관하므로 언급하지 않을 것이다.

그리고 <form> 태그로 데이터를 Flask 서버로 전송하기 위한 html 파일도 준비했다.

 

<app.py>

데이터가 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 내에서 사용할 변수 이름이고, 우항 부분은 변수의 값이다.

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')

 

<sample.html>

단순히 변수를 출력할 것이라면 중괄호를 2번 감싸준다. -> {{ }}

그리고, 조건문이나 반복문같은 로직을 수행할 때는 {% %}로 감싸준다.

그리고 if문, for문 뒤에 각각 {% endif %}, {% endfor %}를 작성해줘야 한다.

이러한 표현식들은 Flask에서는 Jinja2라는 템플릿 엔진을 제공하기 때문에 사용 가능한 것이다. 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <!-- a=85, b=5 -->
    a = {{a}} <br>
    b = {{b}} <br>

    {% if a >= 60 %}
        <h1>PASS</h1>
    {% else %}
        <h1>FAIL</h1>
    {% endif %}

    {% for i in range(b) %}
        <h2>{{i}}</h2>
    {% endfor %}

</body>
</html>

 

실행 결과

반응형

'Flask' 카테고리의 다른 글

[Flask] Flask는 무엇인가? + Flask 기초  (0) 2021.02.18

댓글