기술블로그

Flask에서 애플리케이션에서 동적 라우트와 조건부 템플릿 사용 with 파머(3/3)

Chansman 2025. 4. 22. 14:44

Flask 애플리케이션에서 동적 라우트와 조건부 템플릿 사용

이번 Flask 애플리케이션에서는 동적 URL 경로를 설정하고, 이를 템플릿에 전달하여 조건부로 내용을 표시하는 예제를 다룹니다. 주로 URL 경로에서 파라미터를 받아 이를 템플릿에서 동적으로 처리하는 방법과, 조건문을 사용하여 표시할 내용을 다르게 만드는 방법을 보여줍니다.


1. Flask 애플리케이션 (app.py)

from flask import Flask, render_template, url_for, redirect

app = Flask(__name__)

# 이름을 받아 인사하는 라우트
@app.route('/greeting/<name>')
def greeting(name):
    return render_template("greeting.html", name_index=name)

# 나이를 받아 성인 여부를 확인하는 라우트
@app.route('/check_age/<int:age>')  # <int:age>는 'age' 변수를 정수로 받아옴
def check_age(age):
    return render_template("check_age.html", age_index=age)

if __name__ == '__main__':
    app.run(debug=True)

설명

  • @app.route('/greeting/<name>'): URL에서 name이라는 값을 받아서 인사 메시지를 출력하는 라우트입니다. 예를 들어, /greeting/John으로 요청을 보내면 "John"을 name_index로 전달하여 템플릿에서 name_index를 출력합니다.
  • @app.route('/check_age/<int:age>'): URL에서 age를 정수 값으로 받아서 성인 여부를 판단하는 라우트입니다. 예를 들어, /check_age/25로 요청을 보내면 age_index는 25로 전달되고, 템플릿에서 나이에 맞는 메시지를 조건부로 표시합니다.

2. HTML 템플릿 (greeting.html)

<!DOCTYPE html>
<html lang="en">

  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
  </head>

  <body>
    <h1>안녕하세요, {{ name_index }}님!</h1>  <!-- name_index는 Flask에서 전달된 값 -->
  </body>

</html>

설명

  • 템플릿에서 {{ name_index }}는 Flask에서 전달한 name_index 값을 출력하는 부분입니다.
  • 예를 들어, /greeting/John으로 접근하면 name_index는 "John"이 되어 "안녕하세요, John님!"이 출력됩니다.

3. HTML 템플릿 (check_age.html)

<!DOCTYPE html>
<html lang="en">

  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
  </head>

  <body>
    <h1>당신의 나이는 {{ age_index }} 입니다</h1> <!-- age_index는 Flask에서 전달된 나이 값 -->
    {% if age_index >= 19 %}  <!-- 나이가 19세 이상이면 -->
      <p>성인입니다.</p>
    {% else %}
      <p>미성년자입니다.</p>
    {% endif %}
  </body>

</html>

설명

  • 템플릿에서 {{ age_index }}는 Flask에서 전달된 age_index 값을 출력하는 부분입니다.
  • 조건문 ({% if ... %} ... {% else %} ... {% endif %}):
    • 나이가 19세 이상이면 "성인입니다."라는 메시지를 출력하고, 그렇지 않으면 "미성년자입니다."라는 메시지를 출력합니다.
    • 예를 들어, /check_age/25로 접근하면 age_index는 25가 되어 "성인입니다."라는 메시지가 출력됩니다.

4. 동적 URL 및 조건부 로직 흐름

  • 동적 URL 경로: Flask 라우트에서 <int:name>와 같은 동적 경로를 사용하면 URL에서 전달된 값이 함수의 인자로 전달됩니다. 이 값을 템플릿에 전달하여 동적으로 페이지를 렌더링할 수 있습니다.
  • 조건부 로직: 템플릿 내에서 if 조건문을 사용하여 값에 따른 다양한 출력을 할 수 있습니다. 예를 들어, 나이에 따라 "성인" 또는 "미성년자"라는 메시지를 출력하는 것입니다.

5. 예시 URL 및 결과

  • /greeting/John: 이 URL을 입력하면 greeting.html이 렌더링되고, "안녕하세요, John님!" 메시지가 출력됩니다.
  • /check_age/25: 이 URL을 입력하면 check_age.html이 렌더링되고, "당신의 나이는 25 입니다"와 함께 "성인입니다."라는 메시지가 출력됩니다.
  • /check_age/17: 이 URL을 입력하면 check_age.html이 렌더링되고, "당신의 나이는 17 입니다"와 함께 "미성년자입니다."라는 메시지가 출력됩니다.

6. 결론

  • Flask의 동적 URL 경로(/<type:variable>)를 사용하면 URL에서 변수를 동적으로 받아와 처리할 수 있습니다.
  • 템플릿에서는 조건문을 사용하여 동적으로 출력되는 값을 기반으로 화면에 표시할 내용을 조정할 수 있습니다.
  • 이를 통해 웹 애플리케이션에서 사용자 맞춤형 콘텐츠를 효율적으로 제공할 수 있습니다.