Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用flask.jsonify并在flask路由中呈现模板_Python_Json_Flask - Fatal编程技术网

Python 如何使用flask.jsonify并在flask路由中呈现模板

Python 如何使用flask.jsonify并在flask路由中呈现模板,python,json,flask,Python,Json,Flask,是否可以呈现模板并在同一路线中使用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 orde

是否可以呈现模板并在同一路线中使用
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)
有没有办法把两者结合起来

  • 如果您需要在一个路由中为不同的情况返回不同的响应对象:
    render_template
    return
    unicode
    转换为有效的
    response
    jsonify
    return ready
    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))
    
  • 如果您需要在模板中呈现json:您可以在模板中使用safe
    tojson
    filter。请参阅我的另一个答案:

  • 如果需要使用呈现的模板值返回json:可以隐式呈现每个模板并为响应dict或list设置值,然后只需使用jsonify


  • 谢谢你。你能再解释一下选项3吗?我对此有点困惑。例如,您应该有一些json响应:
    {“status”:“ok”,“data”:[{“name”:“info”,“content”:“info HTML content THERE”},{“name”:“profile”,“content”:“profile HTML content THERE”},…]}
    。每个数据项都包含使用一些模板和参数生成的内容。因此,要创建json响应,您可以执行以下操作
    返回jsonify({'status':'ok','data':[{'name':name','content':render_template(tmpl,**args)}作为db_cursor.fetchall()中的name,tmpl,args)
    。啊,好的,这很有意义。我想我将使用选项二。谢谢您的帮助。