Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I pass arguments into redirect(url_for()) of Flask?

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") 
like image 298
shartshooter Avatar asked Nov 16 '14 05:11

shartshooter


People also ask

How to pass arguments into redirect(URL_for() of flask?

Then we call redirect with the URL to redirect to the /found/<email>/<list_of_objects> route. To pass arguments into redirect (url_for ()) of Flask, we define the destination route to get the request parameters.

What is URL parameter in flask?

Flask URL parameters is defined as a set of arguments in form of a query string that is passed to a web application through Flask. These parameters get bonded to the URL.

How do I get the value of a parameter in flask?

In the first one we would use request.args.get (‘<argument name>’) where request is the instance of the class request imported from Flask. Args is the module under which the module GET is present which will enable the retrieve of the parameters. And finally, we need to replace <argument name> with the argument/variable we want the value of.

How to get the key from a query in flask?

Now in order to retrieve the key from query, we have 2 ways, with both of them having some subtle differences. In the first one we would use request.args.get (‘<argument name>’) where request is the instance of the class request imported from Flask.


1 Answers

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.

like image 115
Adam Byrtek Avatar answered Sep 20 '22 17:09

Adam Byrtek