是否可以渲染模板并在同一路线中使用flask.jsonify
?
@app.route('/thankyou')
def thankyou():
db = get_db()
summary_cursor = db.execute('SELECT * FROM orders JOIN order_items USING (transaction_id) WHERE orders.transaction_id = (SELECT MAX(transaction_id) FROM orders)')
summary = summary_cursor.fetchall()
data = map(list, summary)
print data
return render_template('thankyou.html', summary = json.dumps(data))
现在我正在使用json.dumps
来序列化我的数据,但它确实有一些奇怪的东西。我想使用jsonify
,因为当我这样做时,我得到了一个非常漂亮的输出,似乎更适合使用:
@app.route('/thankyou')
def thankyou():
db = get_db()
summary_cursor = db.execute('SELECT * FROM orders JOIN order_items USING (transaction_id) WHERE orders.transaction_id = (SELECT MAX(transaction_id) FROM orders)')
summary = summary_cursor.fetchall()
data = map(list, summary)
print data
return jsonify(summary = data)
有没有办法将两者合并?
答案 0 :(得分:9)
如果您需要在不同情况下在一条路线中返回不同的响应对象:render_template
返回unicode
转换为有效Response
而jsonify
已返回Response
1}} object,所以你可以在同一路径中使用它们:
@app.route('/thankyou')
def thankyou():
db = get_db()
summary_cursor = db.execute('SELECT * FROM orders JOIN order_items USING (transaction_id) WHERE orders.transaction_id = (SELECT MAX(transaction_id) FROM orders)')
summary = summary_cursor.fetchall()
data = map(list, summary)
print data
if request.args['type'] == 'json':
return jsonify(summary = data)
else:
return render_template('thankyou.html', summary=data))
如果您需要在模板中渲染json:您可以在模板中使用安全的tojson
过滤器。请参阅我的另一个答案:https://stackoverflow.com/a/23039331/880326。
如果需要使用渲染模板值返回json:您可以隐式渲染每个模板并设置响应字典或列表的值,然后只使用jsonify。