大家好:我正在使用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字典供我在模板中使用吗?
感谢您的帮助! 凸轮
答案 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调用并在前端进行一些模板操作。如果你不重读页面,只需坚持使用烧瓶的模板引擎。