Flask에서 url_for를 사용하여 동적 URL 만들기
이 설명을 통해 url_for()
함수가 하는 일과 Flask에서 동적 URL을 만드는 방법을 배웁니다. 템플릿 내에서 url_for()
를 사용하는 방법도 배웁니다.
Flask의 url_for()
함수를 사용하여 동적 URL 만들기
url_for()
는 특정 보기 함수에 사용된 URL을 반환하는 Flask의 함수입니다. 그리고 해당 URL을 사용하여 사용자를 해당 페이지로 리디렉션하거나 해당 URL만 표시할 수 있습니다.
시연하기 위해 어떻게 하는지 보여드리겠습니다. 이제 url_for
및 redirect
와 함께 Flask 가져오기를 시작하겠습니다.
from flask import Flask, url_for, redirect
이것은 이 예제에서 사용할 두 가지 기능이며 BASE_FUNC()
보기에 경로가 있습니다.
@app.route("/")
def BASE_FUNC():
return "Hi there,the base index page"
이제 FIRST_FUNC
라고 하는 또 다른 경로를 만들고 다른 함수의 이름인 url_for('BASE_FUNC')
를 반환합니다. url_for()
함수는 함수 이름을 취하고 url_for()
함수 내부에 전달한 해당 함수의 경로를 반환합니다.
@app.route("/first")
def FIRST_FUNC():
return url_for("BASE_FUNC")
이 경로 /first
에 액세스하려고 하면 BASE_FUNC()
함수와 연결된 URL을 얻게 됩니다. 즉, 해당 경로를 얻게 됩니다. 이것을 저장하고 서버를 실행해보자.
이 끝점 /first
를 입력하면 슬래시만 표시됩니다.
다른 경로를 만들고 함수 이름이 SECOND_FUNC()
인 /second
라고 하면 url_for('THIRD_FUNC', user_name='Harry')
를 반환합니다. Flask에서 경로는 매개변수와도 작동하므로 문자열이 될 매개변수를 사용하여 다른 경로를 생성해야 합니다.
/third/<string:user_name>
과 같은 경로를 만들고 url_for()
함수를 전달할 때 경로 내에서 동일한 이름의 매개변수를 사용하고 있는지 확인합니다. 이제 THIRD_FUNC()
라는 새 함수를 만들고 동일한 이름의 매개변수를 전달합니다.
user_name
매개변수를 반환하고 url_for()
함수를 사용하여 다른 함수의 경로에서 이 함수에 액세스합니다.
@app.route("/second")
def SECOND_FUNC():
return url_for("THIRD_FUNC", user_name="Harry")
@app.route("/third/<string:user_name>")
def THIRD_FUNC(user_name):
return "The user name is " + user_name
/second
를 입력하면 THIRD_FUNC()
함수의 경로가 표시됩니다.
URL 또는 링크를 사용하여 사용자를 Flask 애플리케이션의 특정 페이지로 리디렉션할 수 있으며 이제 URL만 반환하는 대신 사용자를 특정 URL로 리디렉션할 수 있습니다. 사용자를 리디렉션하려는 URL을 가져오는 redirect()
함수를 호출해야 합니다.
redirect(url_for("THIRD_FUNC", user_name="Harry"))
이제 /second
를 호출하면 /third/<string:user_name>
경로의 URL을 가져와서 세 번째 경로로 보냅니다.
이제 Jinja 템플릿을 사용하여 템플릿 내에서 url_for()
를 사용하는 방법을 보여줍니다. render_template()
을 가져와 index.html
이라는 HTML 파일을 렌더링하는 데 사용합니다. 우리는 문자열을 반환할 다른 경로를 사용할 것입니다.
@app.route("/")
def BASE_FUNC():
return render_template("index.html")
@app.route("/page")
def Page_FUNC():
return "Hello"
템플릿 폴더 안에 index.html
파일을 만들고 /page
경로에 대한 링크를 추가합니다. 링크를 전달하는 대신 url_for()
내부에 Page_FUNC
를 전달합니다.
<a href="{{url_for('Page')}}">Page</a>
페이지를 저장하고 새로고침해 보겠습니다.
이제 우리는 그것을 조금 더 복잡하게 만들 것입니다. 매개변수가 될 /page
와 함께 전달할 수 있는 동적 요소를 추가합니다. 두 번째 키워드 인수가 해당 경로 함수에 전달해야 하는 인수가 될 수 있도록 템플릿 내부에서 이 매개변수를 사용합니다.
이 경우 user_name
은 Josh
와 같습니다.
<a href="{{ url_for('Page_FUNC',user_name='Josh') }}">Page</a>
출력:
완전한 Python 소스 코드:
from flask import Flask, url_for, render_template
app = Flask(__name__)
# @app.route("/")
# def BASE_FUNC():
# return "Hi there,the base index page"
# @app.route("/first")
# def FIRST_FUNC():
# return url_for('BASE_FUNC')
# @app.route("/second")
# def SECOND_FUNC():
# return redirect(url_for('THIRD_FUNC', user_name='Harry'))
# @app.route("/third/<string:user_name>")
# def THIRD_FUNC(user_name):
# return "The user name is " + user_name
@app.route("/")
def BASE_FUNC():
return render_template("index.html")
@app.route("/page/<string:user_name>")
def Page_FUNC(user_name):
return "Hello " + user_name
if __name__ == "__main__":
app.run(debug=True)
완전한 HTML 소스 코드:
<html>
<head>
<body>
<h1>Hi User, this is Base page</h1>
<a href="{{ url_for('Page_FUNC',user_name='Josh') }}">Page</a>
</body>
</head>
</html>
Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.
LinkedIn