我正在制作一个非常小的应用程序来学习 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”,但我不太确定如何做到这一点。
总结一下:
非常感谢您的帮助。
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
是一个很好的做法,尽管在本例中不是必需的。