web-dev-qa-db-ja.com

Flaskのredirect(url_for())に引数を渡すにはどうすればよいですか?

Flaskを使用して引数をリダイレクトして渡す最良の方法を理解しようとしています

以下は私のコードです。xyがテンプレートに含まれていないことがわかりました。

私の構文は正しいですか?基本的なものが欠けていますか?テンプレートをレンダリングできますが、単に/foundのテンプレートを返すのではなく、URL find.htmlにリダイレクトしたいです

@app.route('/found')
def found(email,listOfObjects):
  return render_template("found.html",
      keys=email,obj=listOfObjects)

@app.route('/find', methods=['GET','POST'])
def find():
    if request.method == 'POST':
        x = 3
        y = 4
        return redirect(url_for('found',keys=x,obj=y))

    return render_template("find.html")
21
shartshooter

リダイレクトは問題ありません。問題はfoundルートにあります。エンドポイントに値を渡す方法はいくつかあります。パスの一部として、URLパラメーター(GET要求の場合)、または要求本文(POST要求)のいずれか)。

つまり、コードは次のようになります。

@app.route('/found/<email>/<listOfObjects>')
def found(email, listOfObjects):
  return render_template("found.html",
      keys=email, obj=listOfObjects)

代わりに:

@app.route('/found')
def found():
  return render_template("found.html",
      keys=request.args.get('email'), obj=request.args.get('listOfObjects'))

また、リダイレクトはテンプレートパラメータではなくリクエストパラメータを提供する必要があります。

return redirect(url_for('found', email=x, listOfObjects=y))

お役に立てば幸いです。

47
Adam Byrtek