【问题标题】:Django request.POST.items() not behaving as expectedDjango request.POST.items() 未按预期运行
【发布时间】:2020-10-23 03:31:21
【问题描述】:

我有一个传入的 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


    【解决方案1】:

    QueryDict.items(...) 只返回最后一个值。大概,你应该使用QueryDict.lists(...)

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

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

    【讨论】:

    • 这解决了它。但是,我仍然认为.items() 行为不当。
    猜你喜欢
    • 2014-11-12
    • 1970-01-01
    • 2020-06-28
    • 2012-02-18
    • 2018-01-18
    • 2012-06-14
    • 2019-03-03
    • 2012-09-21
    • 2014-07-19
    相关资源
    最近更新 更多