【问题标题】:How to use json.dumps() to render python object in Flask app?如何使用 json.dumps() 在 Flask 应用程序中渲染 python 对象?
【发布时间】:2017-09-22 22:24:12
【问题描述】:

大家好:我正在使用 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 字典供我在模板中使用吗?

感谢您的帮助! 凸轮

【问题讨论】:

    标签: python json templates flask


    【解决方案1】:

    不要将 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 调用并在前端进行一些模板化。如果您不介意页面重新加载,请坚持使用 flask 的模板引擎。

    【讨论】:

    • 谢谢,我确实想让数据作为 javascript 对象提供。每次单击按钮时,我都使用 jquery GET 请求来更新值。当您说进行ajax调用时,您建议使用GET还是POST请求?
    • GET 就足够了,您不会在后端创建任何新内容。
    • 好的,我很难用这个。当我使用包含对象值的简单字典时,GET 请求似乎崩溃了:它呈现“未定义”。
    猜你喜欢
    • 2019-07-18
    • 1970-01-01
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    • 1970-01-01
    • 2014-04-04
    • 1970-01-01
    相关资源
    最近更新 更多