有時在觸發某些條件以後,會需要進行頁面上的跳轉,而在 Flask 當中即有提供一個函式,redirect,來協助我們完成此功能。但隨著網站不斷再更新,有時我們會更改網站的路徑,若 redirect 的路徑都寫死的話,會導致在開發上麵的不便利,因為得要一個一個更改,因此 Flask 提供了 url_for 來使我們動態的獲取路徑值,而這也是我們今天要來分享的。
# app.py
from flask import Flask, request, redirect, render_template, url_for
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
name = request.values['name']
age = request.values['age']
return redirect(url_for('welcome', name = name, age = age))
return render_template('index.html')
@app.route('/welcome/<name>/<age>')
def welcome(name, age):
return render_template('welcome.html', name = name, age = age)
# index.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>
<form action="" method="post">
<input type="text" name="name" placeholder="請輸入名字"> <br \> <br \>
<input type="text" name="age" placeholder="請輸入年齡"> <br \> <br \>
<input type="submit">
</form>
</body>
</html>
# welcome.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>
<p>welcome {{name}} {{age}} years old</p>
</body>
</html>
redirect("路徑名")
:此函式功能是在重新導向所想要的頁面。url_for("裝飾器函式名", key = value, key = value)
:
/welcome/<name>
的路徑上,而此路徑裝飾器函式名為 welcome
,因此此例子中的裝飾器函式名要填入 welcome
。welcome
此路徑,根據我們上面會傳入的有 name
和 age
兩個 key,因此原先路徑就必須變成 welcome/<name>/<age>
,這邊必須注意要根據傳入 key 的順序來填寫路徑。redirect(url_for('welcome', name = name, age = age))
,使其在往後的維護或擴充上都更加的方便。