将数组从 jQuery 发送到 Django 视图

问题描述 投票:0回答:1

我正在制作一个非常小的应用程序来学习 Django。我从 jQuery 发送一个嵌套数组并尝试在我的 Django 视图中循环它。

jQuery代码如下:

$(document).on('click','#exModel',function () {
        const sending = [];
       $("table tr").each(function () {

               var p1 =  $(this).find("th label").html();
               var p2 = $(this).find("td input").attr('id');
               var p3 = $(this).find("td input").val();

               const build = [];
               build.push(p1, p2, p3);
               sending.push(build);
               console.log(sending);
           });
       $.ajax({
               url: '../coreqc/exModel/',
               data: {'sending': sending},
               type: 'post',
               headers: {'X-CSRFToken': '{{ csrf_token }}'},
               async: 'true',
               success: function (data) {
                   
                console.log("I made it back")
                        //dom: 'Bfrtip',

               }
                    });
                });

上述内容有效,并在控制台中采用以下形式:请注意,第三个值故意为空,因为我发送了字段中没有值的表单以让控制台读出。

[Log] [["Product A", "1", ""], ["Product B", "2", ""], ["Product C", "3", ""], ["Product D", "4", ""], ["Product E:", "5", ""], ["Product F", "6", ""], ["Product G", "7", ""], ["Product H", "8", ""], ["Product I", "9", ""], ["Product K", "10", ""], …] (36) (coreqc, line 491) 
[Log] I made it back # This is the success text in the above jQuery code

它正在进入我的视图,我能够将输出打印()到外壳:

ex模型视图:

def exModel(request):
    sentData = request.POST
    print(sentData)

    template = loader.get_template('coreqc/tester.html')
    context = {
    'sentData':sentData
    }
    return HttpResponse(template.render(context, request))

现在,“sentData”确实打印到 shell,但对我来说看起来不正确,或者至少“

sending[1][]
”部分不正确。当我说它看起来不对时,我不明白空方括号。我无法像
sending[1][2]
那样访问发送 - 我收到字典键错误。

<QueryDict: {'sending[0][]': ['Product A:', '1', ''], 'sending[1][]': ['Product B', '2', ''], 'sending[2][]': ['Product C', '3', ''], 'sending[3][]': ['Product D', '4', ''], 'sending[4][]': ['Product E', '5', ''], 'sending[5][]': ['Product F', '6', ''], 'sending[6][]': ['Product G', '7', ''], 'sending[7][]': ['Product I', '8', '']}>

我希望能够做的是在我的视图中循环遍历 QueryDict 中的每个值,而不仅仅是打印它们。但是,我不确定如何访问它们或者正在发送的内容是否可以访问。

get.values() - 有效,我可以打印到控制台 - 看起来与上面相同。

我可以像这样循环和打印:

for x, obj in sentData.items():
        print(x)
    
    for y in obj:
        print(y + ':', obj[y])

但是我刚刚得到这个输出,它打印以下内容:

sending[0][]
sending[1][]
sending[2][]
sending[3][]

我需要的是访问内部价值,即“产品A”,但我不太确定如何做到这一点。

总结一下:

  1. 我是否以正确的方式从 jQuery 发送数据?这是 Python Django 可以处理的一种方式。
  2. 如何循环所述数据以访问每个数据字段。

非常感谢您的帮助。

python jquery django django-views
1个回答
0
投票

Django 解析 url 编码 数据(即内容类型为

application/x-www-form-urlencoded
的数据)并将它们存储在
request.POST
中。 您正在发送 JSON 编码数据 (
application/json
)。 只需使用 JSON 解码器来解析数据即可:

import json

def exModel(request):
    data = json.parse(request.body)
    ...

此外,将

Content-Type
标头设置为
application/json
是一个很好的做法,尽管在本例中不是必需的。

© www.soinside.com 2019 - 2024. All rights reserved.