Django-Json模板中的数据

时间:2018-04-21 15:11:08

标签: json django django-templates

我正在访问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 %}

模板未显示任何错误或任何响应。我在这里做错了什么?

4 个答案:

答案 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)