如何在django中访问List类型的数据

时间:2017-03-29 10:44:10

标签: python json ajax django

客户端,我发送了一个JSON数据,包括这样的列表类型数据。

 $.ajax({
     url: '/man/manual',
     type: 'POST',
     data: {'id':'','title':'ttt','description':'desc','steps':[{'title':'1'},{'title':'2'}]},
     dataType : 'JSON',
     success : function(data) {
         console.log(data);
     }
 });

我试图访问这些数据。

title = request.POST['title']
description = request.POST['description']
steps = request.POST['steps']

for step in steps:
    print(step.title)

但是我收到了错误。

Traceback:
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/django/core/handlers/base.py" in get_response

132. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/django/views/generic/base.py" in view

71. return self.dispatch(request, *args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/django/views/generic/base.py" in dispatch
89. return handler(request, *args, **kwargs)
File "/Users/sangwonlee/Makewith/trunk/MW_Service/mw_manual/views.py" in post
77. self.createManual(request)
File "/Users/sangwonlee/Makewith/trunk/MW_Service/mw_manual/views.py" in createManual
27. steps = request.POST['steps']
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/django/utils/datastructures.py" in __getitem__
322. raise MultiValueDictKeyError(repr(key))

Exception Type: MultiValueDictKeyError at /man/manual
Exception Value: "'steps'"
Request information:
GET: No GET data

POST:
description = 'desc'
steps[1][title] = '2'
steps[0][title] = '1'
title = 'ttt'
id = ''

如何从客户端更改我的代码以获取正确的数据。

2 个答案:

答案 0 :(得分:2)

如果您想获取包含所请求密钥的列表,请使用getlist方法。

steps = request.POST.getlist('steps')

doc is here

答案 1 :(得分:2)

首先,我将在AJAX请求的data属性中发送的内容为JSON.stringify({...})您现在发送的内容。

然后,在python代码上,我会这样做:import json; json.loads(request.body),这将为您提供python中的初始JS字典。然后你可以将它用作普通字典。

step也是dictionary,因此打印它的正确方法是print(step['title'])而不是print(step.title)

编辑: 如果json字符串不是纯ASCII,您可能需要先使用以下内容对其进行解码:json.loads(request.body.decode(), encoding='utf-8')