如何使用json.dumps()在Flask应用程序中呈现python对象?

时间:2017-09-22 22:24:13

标签: python json templates flask

大家好:我正在使用Flask开发一个简单的网络应用程序。我有一个python函数,它返回一个对象集合,然后我想在html页面中的模板(即{{ object1.value }})内呈现。我正在考虑创建一个包含对象值的字典,然后通过GET请求将其作为jsonify字符串传递给页面。

Flask应用程序如下所示:

@app.route('/')
def hello():

    python_func(object1,object2,object3...)
    data = json.dumps({object1.key: object1.value, object2.key: object2.value ...})

    if request.is_xhr:
        return jsonify(data=data)
    if request.method == "GET":
        return render_template('main.html',data=data)

if __name__ == '__main__':
    app.run()

html页面如下所示:

 <div class ="dice">
         <div class ="dice-1">
            <div class="card" id ="card1" >

                <p>{{ data }}</p>

          </div>
        </div>

带有事件按钮的脚本。单击按钮时,对象值将更新:

<script>

         $(function() {
                $('#roll-button').click(function() {
                    $.get('/', function(data){ 
                     document.getElementById("card1").innerHTML = data.data;

                    })
                });
           });



</script>

这似乎可以将对象值传递给模板。当我更新页面时,我可以看到包含所有对象键和值的字符串对象。

我的问题是我不知道如何在模板中使用字符串。我对有关解码json的主题的文档(https://docs.python.org/3.4/library/json.html)感到困惑。

因此这个问题:如何解析包含所有对象值的字符串以在模板内呈现,理想情况下如下所示:{{ object1.value }}, {{ object2.value }}, {{ object3.other_attribute }}等......

我可以从json字符串创建一个python字典供我在模板中使用吗?

感谢您的帮助! 凸轮

1 个答案:

答案 0 :(得分:0)

不要将JSON传递给您的模板,传递字典。如果你想在HTML中非动态呈现数据,请使用Jinja和flask内置的东西。

from flask import render_template

@api.route('/foo', methods=['GET'])
def foo():
    my_dictionary = {'a':'b', 'foo':'baz'}
    return render_template('foo.html', my_data=my_dictionary)

然后在你的html模板中

<!DOCTYPE html>
<html lang="en-ca">
 <body>
   {% for key in my_data %}
     <h1>{{key}}</h1>
     <h1>{{my_data.key}}</h1>
   {% endfor %}
 </body>
</html>

如果要在客户端将数据作为javascript对象提供以进行实时更新,则必须进行ajax调用并在前端进行一些模板操作。如果你不重读页面,只需坚持使用烧瓶的模板引擎。