首页 > 解决方案 > Django request.POST.items() 未按预期运行

问题描述

如果我打印这样的帖子,我有一个传入的 ajax 请求:

print("post_data %s" % request.POST)

我明白了:

post_data <QueryDict: {'csrfmiddlewaretoken': ['...'], 'contact_method 1[]': ['Facebook', 'https://www.facebook.com/aandro.veinilla/', 'Send me a message'], 'contact_method 2[]': ['Whatsapp', '+593998375445', 'contact me after 8pm']}>

如您所见,它是一个带有一些键的字典,而值是列表。但如果我这样打印:

    for k, v in request.POST.items():
        print("k: %s" % k)
        print("v: %s" % v)

我明白了:

k: csrfmiddlewaretoken
v: ...hEm9OcUE
k: contact_method 1[]
v: Send me a message
k: contact_method 2[]
v: contact me after 8pm

它只打印每个列表中的最后一项,为什么?我需要遍历所有收到的值,而不仅仅是列表中的最后一项。

还有 一件奇怪的事情可能要做(不确定)是django将'[]'附加到字典键。我确定我没有在 js 中这样做。

标签: django

解决方案


QueryDict.items(...)唯一返回最后一个值。可能,您应该使用QueryDict.lists(...)

for k, v in request.POST.lists():
    print("k: %s" % k)
    print("v: %s" % v)

请注意,即使列表中只有一个项目,这也会返回一个列表request.POST


推荐阅读