我正在尝试在Jinja2 HTML模板中显示一些JSON结果,但是它会返回一个空页面,或者返回新行中的每个JSON字符,或者返回每一个带间距的字符。
我要发送给Jinja2模板的对象如下所示:
[
{
"name": "John",
"lastname": "Smith",
"age": 22,
"likes": [
{"fruits":
["bananas", "oranges"]
},
{"sweets":
["chocolate"]
}
]
}
]
要将JSON对象发送到我使用的Jinja2模板:
render_template("report.html", items=items)
在Jinja2模板{{ items }}
上,如果我使用{{ items }}
,它会将完整的对象显示为文本。如果我试图获得{{ items['name'] }}
,它将不会在页面上显示任何内容,页面将完全为空。
我也试过
{% for x in items %}
{{ x }}
{% endfor %}
而且它只显示相同的“文本”,但使用空格:[ { " n a m e " : "J o h n " [...]
。
在HTML文件中,我试图执行如下操作:
<div id="name">{{ items['name'] }}</div>
如何在传递给Jinja2的JSON对象中显示对象?
发布于 2018-05-11 13:38:54
我想我已经结束了。
我必须首先json_dumps
对象,然后json.loads
新对象。
r = json.dumps(json_onject)
loaded_r = json.loads(r)
return render_template("report.html", items=loaded_r)
现在我可以使用JSON对象中的任何值。
发布于 2020-04-10 20:45:35
我有一个稍微修改过的示例,对我来说效果很好:
app.py:
link_chart_data = {
"type":
"LinkChart",
"items": [{
"type": "node",
"id": "ac1",
"u": "static/icons/bank.png",
"t": "45081063"
}]
}
@app.route('/link_chart')
def covid():
return render_template("link_chart/index.html", flask_data=link_chart_data)
然后在templates/link_ Then /index.html中:
<script>
const parsedData = JSON.parse('{{ flask_data|tojson }}');
const unparsedData = '{{ flask_data }}'
console.log('parsed', parsedData)
console.log('unparsed', unparsedData)
</script>
产生的结果:
parsed,
items: Array(1)
0:
id: "ac1"
t: "45081063"
type: "node"
u: "static/icons/bank.png"
__proto__: Object
length: 1
__proto__: Array(0)
type: "LinkChart"
这就是我想要的。一个新的JSON对象
以及:
unparsed {'type': 'LinkChart', 'items': [{'type': 'node', 'id': 'ac1', 'u': 'static/icons/bank.png', 't': '45081063'}]}
这是我不想要的。
|tojson
jinja模板un是变量,因此它以来自python (烧瓶)的相同格式传递。JSON.parse()
javascript函数将其从字符串转换为javascript中的JSON对象。
我希望这能帮到你。
发布于 2018-05-11 12:04:35
嘿,您所拥有的json是一个数组,而不是一个对象,因此您必须考虑到这一点,首先访问您想要的对象,然后访问属性。
<div id="name">{{ items[0]['name'] }}</div>
或
在本例中,x
成为对象,您可以这样使用它:
{% for x in items %}
<div id="name">{{ x['name'] }}</div>
{% endfor %}
https://stackoverflow.com/questions/50291923
复制相似问题