在django中以键值对的格式打印json数据

时间:2017-12-01 10:46:58

标签: python json django

我正在尝试以键值对的格式打印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格式的键值对。

3 个答案:

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

}