POSTで得た値とアドレスに表記したい値がずれてしまう問題について (Flask)

お世話になっております.
Flask と jinja2 を使って次のコードを書きました. (動作の説明は以下. )

app.py

from flask import Flask, render_template, request app = Flask(__name__) @app.route('/') def index(): return render_template( 'index.html', year=2022 ) @app.route('/<year>', methods=['POST']) def update(year): year = request.form["year"] return render_template( 'index.html', year=year ) if __name__ == '__main__': app.run(debug=True, host='localhost', port=5050)

index.html

<!DOCTYPE html> <html> <head> <title>Update Year</title> </head> <body> <form method='POST' action="{{ url_for('update', year=year) }}"> <select name="year"> <option value="{{ year }}">{{ year }}</option> {% for i in range(2020, 2051) %} <option value="{{ i }}">{{ i }}</option> {% endfor %} </select> <button type="submit">Update</button> </form> <br> We have {{ year }} now. </body> </html>

動作説明:

  1. 表示される画面は year を選択できるプルダウンメニューと, それを更新できる Update ボタンからなる.
  2. はじめ / にいてプルダウンメニューの初期値は year=2022. そこから例えば 2039 を選択して Update を押す.
  3. /2022に遷移してプルダウンメニューの初期値は year=2039 となる. 今度は 2025 を選択して Update を押す.
  4. /2039 に遷移してプルダウンメニューの初期値は year=2025 となる.

問題は例えば3においてアドレス "/2022" と画面に表示される値 2039 が一致しないことです.
これらを一致させるにはどうしたらよいのでしょうか.
問題の原因は <form method='POST' action="{{ url_for('update', year=year) }}"> の部分なのですが, この year を後から代入できるようにする仕組みが分かりません.

何卒宜しくお願い致します.

コメントを投稿

0 コメント