Reputation: 2282
I want to use some data from my Flask view in a JavaScript block in my template. I tried using jsonify
and tojson
, but that gave an error. What is the difference between the two? How do I pass JSON to JavaScript in a template?
@app.route('/stocks')
def stocks():
stocks = jsonify({"aapl":{"price":700, "volume":5000000}, "goog":{"price":655, "volume":9750000}})
return render_template("stocks.html", stocks=stocks)
<script>var zipcodes = {{ stocks|tojson }};</script>
TypeError: <Response 21 bytes [200 OK]> is not JSON serializable
Upvotes: 9
Views: 8510
Reputation: 3374
jsonify
returns a Response
object to be returned from the Flask view as a JSON response to the client so in this case stocks
is not a JSON object but a Response
object.
If you want to use JSON but not directly return it to the client by using, you can use the tojson
filter to convert an object to JSON in the template.
When you need to have JSON in your template, such as to use it in a JavaScript variable, you should use tojson
. When you need to return a JSON response to the client you should use jsonify
.
Upvotes: 16