我正在尝试以键值对的格式打印json数据,以便我可以在我的html模板中呈现它们。
def ecpd(request):
r= requests.get('http://jira.xxx.xxx.com/rest/api/2/issue/key-XXX',auth=HTTPBasicAuth('user','pass'),headers = {'Content-Type' : 'application/json'})
jsonDict = json.loads(r.content)
return HttpResponse(jsonDict['fields'])
作为回复,我只获得“字段”中的键列表。 喜欢:customfield_10070customfield_10071customfield_10072customfield_10073customfield_13221customfield_10074customfield_13220customfield_10075。 我需要一个dict格式的键值对。
答案 0 :(得分:1)
HttpResponse
,如果传递了一个iterable,将迭代它以构建响应内容。 dict
是可迭代的,迭代它实际上是迭代dict的键。从您的问题描述中,我认为jsonDict['fields']
确实是dict
。
如果要将此dict作为json
返回(即使用ajax调用视图),则必须将其转储回json并返回正确的“json”响应。您可以手动执行此操作(转储回json并设置正确的内容类型),或使用内置JsonResponse
(Django> = 1.7)
r = requests.get('http://jira.xxx.xxx.com/rest/api/2/issue/key-XXX',auth=HTTPBasicAuth('user','pass'),headers = {'Content-Type' : 'application/json'})
jsonDict = r.json() # requests shortcut
# Django >= 1.7
return JsonResponse(jsonDict["fields"])
# Django < 1.7
data = json.dumps(jsonDict["fields"])
return HttpResponse(data, content_type="application/json")
现在,如果你想要的是在Django模板中呈现它,只需将它传递给模板的上下文:
r = requests.get('http://jira.xxx.xxx.com/rest/api/2/issue/key-XXX',auth=HTTPBasicAuth('user','pass'),headers = {'Content-Type' : 'application/json'})
jsonDict = r.json() # requests shortcut
return render(request, "path/to/your/template.html", {"data":jsonDict["fields"]})
并在您的模板中:
<dl>
{% for k, v in data %}:
<dt>{{ k }}</dt>
<dd>{{ v }}</dd>
{% endfor %}
</dl>
答案 1 :(得分:-1)
之前的Django 1.7
使用
def ecpd(request):
r = requests.get('http://jira.xxx.xxx.com/rest/api/2/issue/key-XXX',auth=HTTPBasicAuth('user','pass'),headers = {'Content-Type' : 'application/json'})
response_data = r.content
return HttpResponse(json.dumps(response_data), content_type="application/json")
从Django 1.7开始
from django.http import JsonResponse
#rest of the views
def ecpd(request):
r = requests.get('http://jira.xxx.xxx.com/rest/api/2/issue/key-XXX',auth=HTTPBasicAuth('user','pass'),headers = {'Content-Type' : 'application/json'})
response_data = r.content
return JsonResponse(response_data)
答案 2 :(得分:-2)
componentWillMount() {
let msg = '';
const options = {
debug: true,
protocols: webstomp.VERSIONS.supportedProtocols()
}
this.stompClient = webstomp.client("ws://192.168.3.167:8080/test", options)
this.stompClient.connect({}, (frame) => {
console.log("OK")
this.stompClient.subscribe('/topic/greetings', (greeting) => {
msg = JSON.parse(greeting.body);
});
this.setState({
connected: true,
message: msg
})
}, (err) => console.log(err))
}