Python 3.x Python分析字典列表TypeError:字符串索引必须是整数
我有一个HTML表单输入字段,它返回我希望在Django视图中使用PYthon获取值的字典列表 表格返回:Python 3.x Python分析字典列表TypeError:字符串索引必须是整数,python-3.x,Python 3.x,我有一个HTML表单输入字段,它返回我希望在Django视图中使用PYthon获取值的字典列表 表格返回: request.POST['tags'] returns => [{"value":"summer"},{"value":"winter"}] 当我尝试对请求中的标记使用[tag['value']进行交互时。POST['tags']要获取值,我得到类型错误:字符串索引必须是整数 但是,如果我手动将输入字段结果复制到命令行并逐行执行,它将按预期工作: >>> te
request.POST['tags'] returns => [{"value":"summer"},{"value":"winter"}]
当我尝试对请求中的标记使用
[tag['value']进行交互时。POST['tags']
要获取值,我得到类型错误:字符串索引必须是整数
但是,如果我手动将输入字段结果复制到命令行并逐行执行,它将按预期工作:
>>> test = [{"value":"summer"},{"value":"winter"}]
>>> test
>>> [{'value':'summer'},{'value':'winter'}]
>>> [tag['value'] for tag in test]
>>> ['summer', 'winter']
发生了什么事
更新以添加3个不同请求的打印。发布结果:
request.POST => <QueryDict: {'tags': ['[{"value":"summer"},{"value":"winter"}]']}>
request.POST.values => <bound method MultiValueDict.values of <QueryDict: {
'tags': ['[{"value":"summer"},{"value":"winter"}]']}>>
request.POST[tags] => [{"value":"summer"},{"value":"winter"}]
request.POST=>
request.POST.values=>
request.POST[tags]=>[{“value”:“summer”},{“value”:“winter”}]
QueryDict.\uuuu获取项目\uuuuuuuuuuuuuuuuuu(键)
返回给定键的值。如果键有多个值,则返回最后一个值。如果键不存在,则引发django.utils.datastructures.MultiValue DictKeyError。(这是Python标准KeyError的一个子类,因此您可以坚持捕获KeyError。)
当同一个键有多个值时,必须使用用户getlist()
:
[tag['value'] for tag in request.POST.getlist('tags')]
QueryDict.getlist(键,默认值=None)
返回具有请求的键的数据列表。如果键不存在且未提供默认值,则返回空列表。它保证返回一个列表,除非提供的默认值不是列表
编辑
好的,我现在明白了。您没有向arg标记发送列表,而是发送表示列表的字符串
如果我没有遗漏任何其他内容,则以下内容应适用:
import json
tags = json.loads(request.POST['tags'])
[tag.get('value') for tag in tags]
我怀疑它之间可能有更多的层次-你能试试:[tag for tag in request.POST['tags']]
仔细检查一下,如果这个标签
真的是一个dict吗?@GrzegorzSkibinski标签
(或者请求.POST['tags']
,甚至是请求.POST
,就我们所知)显然是一个字符串,基于这个错误,我怀疑:[eval(tag)['value']用于请求中的标记。POST['tags']]
或[tag['value']用于eval(请求。POST['tags'])]
应该做什么?@GrzegorzSkibinski从不使用eval
json.loads
应该是这里的修复程序(或者更好的,request.json()
或web framework OP中使用的类似解决方案)添加了额外的request.POST
结果[tag['value']for tag in eval(request.POST['tags'])]
=>['summer',winter']
[tag['value']for tag in request.POST.getlist('tags')]
还返回错误字符串索引必须是整数
。