我正在访问API并获取JSON数据。我可以看到生成了JSON。但是我无法在模板中显示它。
以下是Json数据示例。
{
"response_code":1,
"response":{
"a":"01/07/2017",
"b":"12",
"c":"23",
"d":"34",
"e":"45",
"f":"56",
},
"error_code":null,
"error_message":null
}
我将此数据传递给模板dataset
。
按评论中的要求查看。
response = requests.request("GET", url, data=payload, headers=headers, params=querystring)
json_string = json.dumps(response)
return render(request,'searchhome.html',{'dataset':json_string})
我在模板中尝试了什么。
{% for key, value in dataset.items %}
{{key}}: {{value}}
{% endfor %}
另一次尝试
{% for d in dataset %}
{% for key, value in d.response.items %}
{{key}} {{value}}
{% endfor %}
{% endfor %}
模板未显示任何错误或任何响应。我在这里做错了什么?
答案 0 :(得分:2)
要迭代,你需要它是一个python dict
对象而不是JSON字符串。
您可以使用json
包来执行此操作。
示例:
import json
string_containing_json = ".."
data = json.loads(string_containing_json)
Json只是一个以特殊格式排列的字符串。在使用之前,您需要将其转换为python对象。
编辑:我不知道为什么要downvote。从这个问题来看,这绝对是问题所在。 OP没有将json字符串转换为字典。你不能像字典那样迭代字符串。答案 1 :(得分:2)
您不应该在视图中将数据转储回JSON。一旦你完成了它,它现在是一个字符串,所以它没有items
方法。
您应该将response.json()
的结果直接传递给模板。
答案 2 :(得分:1)
我认为,在视图中,您需要像这样转换response
:
import json
response = requests.request("GET", url, data=payload, headers=headers, params=querystring)
json_string = json.dumps(response)
return render(request,'searchhome.html',{'dataset':json_string})
然后,我认为,您可以访问数据
{{ dataset.response_code }}
{{ dataset.response.0 }}
等
答案 3 :(得分:0)
最后我可以解决它。 我的观点改变了:
response = requests.request("GET", url, data=payload, headers=headers, params=querystring)
response = json.loads(response.content)
json_string = response["response"]
return render(request,'searchhome.html',{'dataset':json_string})
我的模板
{% for k,v in dataset.items %}
<tr>
<td>
{{k}}:{{v}}</td>
<tr>
{% endfor %}
解决方案包括尝试发布所有答案,只需将.content
添加到json.loads(response)