如何在Django中迭代queryobject?

2024-06-02 21:25:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我想迭代查询对象来处理并相应地发送响应。你知道吗

这是有效的JavaScript部分

var msg = $.ajax({type: "GET", url: "jsonview/", async: false}).responseText;
document.write(msg);

这是工作django视图.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')

等等


Tags: noinnewfordatagetfoorequest
3条回答

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():在dict上迭代,并在keyval变量中获取每个键和值。你知道吗

附加说明:

  • 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():映射变量中元组的每个值要方便得多

你能做到的

var msg = $.ajax({
                    type: "POST",
                    url: "jsonview/",
                    data: {"data": ["foo","spam"]},
                    async: false
                    }).responseText;
document.write(msg);

然后在视图中

for item in request.POST.getlist('data[]'):

请求中没有data键;这只是jQuery用来将数据值传递给ajax函数的参数。你知道吗

还要注意的是,JS中的{["foo","spam"]}的计算结果只有["foo","spam"];不能没有键的对象,它只是一个数组。你知道吗

因为这不是表单编码的数据,所以不能在Python中使用request.GETrequest.POST。您可以从request.body读取这些数据,但最好将其作为JSON传递并在另一端解析。所以,在JS中:

$.ajax({
    type: "POST",
    url: "jsonview/",
    data: JSON.stringify(["foo","spam"]),
    ...
});

在Python中:

data = json.loads(request.body)

相关问题 更多 >