web-dev-qa-db-fra.com

Comment puis-je passer des arguments dans redirect (url_for ()) de Flask?

J'essaie de comprendre la meilleure façon de rediriger et de passer des arguments à l'aide de Flask

Ci-dessous mon code, je constate que x et y ne sont pas dans le modèle.

Ma syntaxe est-elle correcte? Suis-je en train de manquer quelque chose de basique? Je peux rendre le modèle, mais je veux rediriger vers l'url /found, plutôt que de simplement renvoyer le modèle pour 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

La redirection est correcte, le problème vient de la route found. Vous avez plusieurs façons de transmettre des valeurs à un point de terminaison: soit dans le cadre du chemin d'accès, dans les paramètres d'URL (pour les demandes GET), soit dans le corps de la demande (pour POST requêtes).

En d'autres termes, votre code devrait ressembler à ceci:

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

Alternativement:

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

En outre, votre redirection doit fournir des paramètres de demande, pas des paramètres de modèle:

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

J'espère que ça t'as aidé.

47
Adam Byrtek