이 글은 특정 함수를 위해서 URL을 동적으로(유연하게) 만드는데 유용한 url_for()
함수를 소개하려한다.
이 함수는 첫 번쨰 인자로 특정 함수의 이름이고, 나머지 키워드 인자들을 받는다. 여기서 키워드 인자는 URL 안에 변수들과 대응한다.
다음 예시를 보자.
from flask import Flask, redirect, url_for
app = Flask(__name__)
@app.route('/admin')
def hello_admin():
return 'Hello Admin'
@app.route('/guest/<guest>')
def hello_guest(guest):
return 'Hello %s as Guest' % guest
@app.route('/user/<name>')
def hello_user(name):
if name =='admin':
return redirect(url_for('hello_admin'))
else:
return redirect(url_for('hello_guest',guest = name))
if __name__ == '__main__':
위에 스크립트에서 hello_user
함수는 name
을 URL에서 변수로 받는다. 그리고 나서 name
이 'admin' 이면 url_for
함수를 사용해 hello_admin
함수를 리다이렉트를 한다. admin
이 아니라면 hello_user
함수는 name
을 게스트 이름으로 간주하고 hello_guest
함수와 guest
는 해당 name
으로써 리다이렉트한다.
위에 코드를 저장하고 실행하면 다음과 같은 결과를 얻을수있다.
URL | Output | Description |
---|---|---|
http://localhost:5000/user/admin | Hello Admin | name == 'admin' is True , so hello_user return redirect(url_for('hello_admin')) |
http://localhost:5000/user/mvl | Hello mvl as Guest | name == 'admin ' is False , so hello_user return redirect(url_for('hello_guest', 'mvl')) |
http://localhost:5000/user/jacob | Hello Jacob as Guest | name == 'admin ' is False , so hello_user return redirect(url_for('hello_guest', 'jacob')) |