I'm trying to understand how best to redirect and pass arguments using Flask

Below is my code, I'm finding that x and y are not making it into the template.

Is my syntax correct? Am I missing something basic? I am able to render the template, but I want to redirect to the url /found, rather than just returning the template for 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") 
0

1 Answer

The redirect is fine, the problem is with the found route. You have several ways to pass values to an endpoint: either as part of the path, in URL parameters (for GET requests), or request body (for POST requests).

In other words, your code should look as follows:

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

Alternatively:

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

Also, your redirection should provide request parameters, not template parameters:

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

Hope that helps.

6

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy