是否可以渲染模板并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))
Run Code Online (Sandbox Code Playgroud)
现在我正在使用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)
Run Code Online (Sandbox Code Playgroud)
有没有办法将两者结合起来?
tbi*_*icr 10
如果需要在一个路径中针对不同情况返回不同的响应对象:将该转换render_template返回unicode到有效Response并jsonify返回已经Response对象,因此您可以在同一路径中使用两者:
@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))
Run Code Online (Sandbox Code Playgroud)如果您需要在模板中渲染json:您可以在模板中使用安全tojson过滤器.请参阅我的另一个答案:https://stackoverflow.com/a/23039331/880326.
如果需要返回带有渲染模板值的json:您可以隐式渲染每个模板并为响应字典或列表设置值,然后只使用jsonify.