我想迭代Query-object来处理并相应地发送响应。
这是有效的JavaScript部分
var msg = $.ajax({type: "GET", url: "jsonview/", async: false}).responseText;
document.write(msg);
这是有效的django views.py
from django.http import JsonResponse
def jsonview(request):
return JsonResponse({"foo":"bar", "spam" : "no"})
我得到了结果{"foo": "bar", "spam": "no"}
但我想这样做(不要问为什么)。
var msg = $.ajax({
type: "GET",
url: "jsonview/",
data:{["foo","spam"]},
async: false
}).responseText;
document.write(msg);
def jsonview(request):
spam_dict = {"foo":"bar", "spam" : "no"}
new_dict = {}
for item in request.GET.get('data'):
new_dict[item] = spam_dict[item]
return JsonResponse(new_dict)
desired -> {"foo":"bar", "spam" : "no"}
我尝试了各种方法,比如
for item in request.GET:
for item in request.GET.get('data')
等
答案 0 :(得分:1)
您的请求中没有data
个密钥;这只是jQuery用于将数据值传递给ajax函数的参数。
另请注意,JS中的{["foo","spam"]}
评估为["foo","spam"]
;你不能拥有没有键的对象,它只是一个数组。
由于这不是表单编码数据,因此您无法在Python中使用request.GET
或request.POST
。您可以从request.body
读取此数据,但最好将其作为JSON传递并在另一端解析它。所以,在JS中:
$.ajax({
type: "POST",
url: "jsonview/",
data: JSON.stringify(["foo","spam"]),
...
});
并在Python中:
data = json.loads(request.body)
答案 1 :(得分:1)
request.GET是一个类似字典的对象,可以像任何其他Python字典一样进行迭代:
>>> from django.http.request import HttpRequest
>>> req = HttpRequest()
>>> req.GET["test"] = 5
>>> req.GET["test2"] = "pouet"
>>> for key, val in req.GET.items():
... print(key, val)
...
test2 pouet
test 5
简而言之,只需使用for key, val in request.GET.items():
来迭代您的字典,并获取key
和val
个变量中的每个键和值。
附加说明:
for item in request.GET:
只是迭代字典的键for item in request.GET.get('data'):
尝试迭代与dict中'data'
键关联的值(不存在)request.GET.items()
返回一个迭代器,以元组的形式获取每个键/值对。您可以通过将元组存储在单个变量for key_value_pair in request.GET.items():
中来检索元组,然后使用key_value_pair[0]
访问密钥,使用key_value_pair[1]
访问值。但是使用for key, val in request.GET.items():
答案 2 :(得分:0)
你可以这样做
var msg = $.ajax({
type: "POST",
url: "jsonview/",
data: {"data": ["foo","spam"]},
async: false
}).responseText;
document.write(msg);
然后在视图中
for item in request.POST.getlist('data[]'):