django - 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 中这样做。
解决方案
QueryDict.items(...)
唯一返回最后一个值。可能,您应该使用QueryDict.lists(...)
for k, v in request.POST.lists():
print("k: %s" % k)
print("v: %s" % v)
请注意,即使列表中只有一个项目,这也会返回一个列表request.POST
推荐阅读
- xamarin.forms - 如何在跨平台移动应用项目(VS 2017/Xamarin)中实现 WkWebView?
- docker - 无法删除 Docker 容器中的文件夹
- angular - Angular CLI 6 - 使用源映射构建 Angular 库
- angular - 运行 ng build 后 index.html 不直接放在 dist 文件夹下
- c++ - 从命令行将文本文件读入向量
- derby - Artifactory 问题(可能与 Derby 有关)
- c++ - 从函数返回一个包含另一个对象的对象
- azure - 到 Azure Web 应用程序的 VSTS 发布管道部署到 wwwroot 子目录
- build - 如何使 CMake 使用环境变量 LD_LIBRARY_PATH 和 C_INCLUDE_DIRS
- python - 如何使用 Python 3 在 MySQL 中避免 b' 和 UTF-8 文字