如何使用flask.js在flask rou中定义和渲染模板

2024-04-23 20:25:19 发布

您现在位置:Python中文网/ 问答频道 /正文

是否可以呈现模板并在同一路径中使用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)

有没有办法把两者结合起来?


Tags: fromidappdbdatagetdefsummary
1条回答
网友
1楼 · 发布于 2024-04-23 20:25:19
  1. 如果您需要在一个路由中为不同的情况返回不同的响应对象:render_template返回unicode转换为有效的Responsejsonify返回已经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))
    
  2. 如果需要在模板中呈现json:可以在模板中使用safetojson过滤器。看我的另一个答案:https://stackoverflow.com/a/23039331/880326

  3. 如果需要返回带有呈现模板值的json:可以隐式呈现每个模板并设置response dict或list的值,那么只需使用jsonify。

相关问题 更多 >