在Flask HTML页面中访问JSON数据
我有一个用Python和Flask写的应用。在views.py文件里,我从数据库查询数据,并把一个分页对象返回给HTML页面进行渲染。这里返回的模型对象包含一个名字属性,在HTML页面上是这样访问的:
{% for item in passed_items.items %}
{{item.name}}
{% endfor %}
这个输出是正确的。这个对象还有一个属性是JSON格式的编码,但我无法正确访问这些数据。
{% for item in passed_items.items %}
{{item.json}}
{% endfor %}
虽然可以正确输出所有的JSON内容,但我无法访问JSON中的具体信息。例如,item.json会输出:
{"location":"here", "city":"there"}
但是我无法访问像位置或城市这样的具体信息。我知道JSON编码是正确的,因为我把它复制粘贴到Python终端里可以正常访问。但不知为何,Python似乎没有把输出的数据识别为字典或JSON格式。我尝试过以下方法:
{% for item in passed_items.items %}
{{item.json["location"]}}
{{item.json['location']}}
{{item.json.location}}
{% endfor %}
但这些都没有任何输出。有没有什么建议可以让我访问这些数据?或者怎么让它被识别为字典或JSON格式?我觉得我花了太多时间在访问这个简单的JSON对象上,哈哈。
谢谢大家的帮助!
编辑:我通过输入确认:
{% for json in item.json %}
{{json}}
{% endfor %}
它只是把每个字符当作一个元素,而没有把它识别为字典或JSON格式。那个for循环输出的是每个字符,而不是我想要的键值对。
编辑2:谢谢大家,是的,我在views.py里用了json.loads()来先处理JSON。然后我就能在后面的HTML页面上正常访问它了。非常感谢大家的帮助!
1 个回答
0
这个json属性可能是一个字符串,你可以像这样把它转换成字典:
import json
data = {
"name": "Johnson",
"json": '{"array":[1,2,3],"boolean":true,"null":null,"number":123,"object":{"a":"b","c":"d","e":"f"},"string":"Hello World"}'
}
data['json'] = json.loads(data['json'])
print data['json']['number']