2015-12-03 2 views
2

Я хочу использовать некоторые данные из моего окна Flask в блоке JavaScript в моем шаблоне. Я пробовал использовать jsonify и tojson, но это дало ошибку. Какая разница между двумя? Как передать JSON на JavaScript в шаблоне?В чем разница между jsonify и tojson в Flask?

@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 
+0

это зависит от того, что вы пытаетесь сделать. какой шаблонный двигатель вы используете? – marcadian

+0

Jinja Я считаю, что это то, что поставляется с Flask :) –

+0

и для решения вашей текущей проблемы вам просто нужно передать '' {"aapl": {"price": 700, "volume": 5000000}, " goog ": {" price ": 655," volume ": 9750000}}' 'непосредственно в jinja в качестве акций без использования' 'jsonify'' – mehdy

ответ

6

jsonify возвращает объект Response должны быть возвращены с точки зрения колбу в качестве ответа JSON к клиенту, так что в этом случае stocks не является объектом JSON, но Response объект.

Если вы хотите использовать JSON, но не можете напрямую вернуть его клиенту, используя фильтр tojson, чтобы преобразовать объект в JSON в шаблон.

Если вам нужен JSON в шаблоне, например, чтобы использовать его в переменной JavaScript, вы должны использовать tojson. Когда вам нужно вернуть ответ JSON клиенту, вы должны использовать jsonify.

+0

Итак, убедитесь, что я это понимаю. При загрузке словаря на страницу из шаблона он не должен находиться в Json. Но для использования этих данных в JS я использую 'tojson'. Теперь, когда вы делаете вызов AJAX для новой информации, то есть когда я буду использовать 'jsonify'. –

+0

вы получили это точно;) – mehdy

Смежные вопросы