Python 向列表中添加multidict值
我从HTML表单发送数据,并使用python(金字塔框架)进行处理,这就是我的观点:Python 向列表中添加multidict值,python,list,dictionary,pyramid,Python,List,Dictionary,Pyramid,我从HTML表单发送数据,并使用python(金字塔框架)进行处理,这就是我的观点: @view_config(renderer='json', request_method='POST') def modify(self): d = self.request.params if d.get("perms"): if type(d.get("perms")) == str or type(d.get("perms")) == un
@view_config(renderer='json', request_method='POST')
def modify(self):
d = self.request.params
if d.get("perms"):
if type(d.get("perms")) == str or type(d.get("perms")) == unicode:
d["perms"] = [d["perms"]]
for perm in d["perms"]:
d[perm] = "on"
当我尝试执行d[“perms”]=[d[“perms”]]
时,我得到一个错误:
KeyError: 'NestedMultiDict objects are read-only'
我已尝试将上述代码更改为:
perms = []
for k, v in d.iteritems():
if k == "perms":
if type(v) == str or type(v) == unicode:
perms = [v]
for perm in perms:
d[perm] = "on"
但它给了我同样的错误
是否可以向列表中添加MultiDict
值?
如果是,怎么做?
为什么
MultiDict
是只读的?您不需要做您正在做的事情:)只需使用request.getall('perm')
,它将始终返回一个列表
WebOb请求的几个属性是“multidict”;结构
(例如request.GET、request.POST和request.params)。多片语
是一个字典,其中一个键可以有多个值。这个
典型的例子是一个查询字符串,如?pref=red&pref=blue;这个
pref变量有两个值:红色和蓝色
在multidict中,当您执行request.GET['pref']时,您只会返回
“blue”(pref的最后一个值)。有时返回字符串,然后
有时返回列表是导致频繁异常的原因。如果
如果要返回所有值,请使用request.GET.getall('pref')。如果你
要确保只有一个值,请使用
request.GET.getone('pref'),如果存在异常,将引发异常
pref为零或多个值
(您也不应该尝试修改只读的
request.params
的值。请使用单独的dict。)您不需要执行您正在执行的操作:)只需使用request.getall('perm')
,它将始终返回一个列表
WebOb请求的几个属性是“multidict”;结构
(例如request.GET、request.POST和request.params)。多片语
是一个字典,其中一个键可以有多个值。这个
典型的例子是一个查询字符串,如?pref=red&pref=blue;这个
pref变量有两个值:红色和蓝色
在multidict中,当您执行request.GET['pref']时,您只会返回
“blue”(pref的最后一个值)。有时返回字符串,然后
有时返回列表是导致频繁异常的原因。如果
如果要返回所有值,请使用request.GET.getall('pref')。如果你
要确保只有一个值,请使用
request.GET.getone('pref'),如果存在异常,将引发异常
pref为零或多个值
(您也不应该尝试修改只读的
request.params
的值。请改用单独的dict。)错误仍然发生在d[perm]=“on”
(将其放入for循环而不是if语句中不会产生任何差异)。你想干什么?从原始代码看,您似乎正在尝试更改d
字典,但它指出这是不可能的。您在新代码中尝试做什么?尝试复制只读字典,如dd=d.copy()
,并查看是否可以修改dd
,因为d是只读的。此外,您还可以在我的表单上使用isinstance(v,basestring)@DavidRobinson检查类型。我有可以打开和关闭的权限。在创建权限时,我选择要启用的权限
我正在尝试启用已选中的权限。我最初收到一个请求。json_body
,但它刚刚停止工作,所以我不得不更改它。在新代码中,我试图将perms
中的值放入一个列表…@sagarchalise感谢您的想法奏效:)
行d[perm]=“on”
(将其放入for循环而不是if语句中没有任何区别)。你想干什么?从原始代码看,您似乎正在尝试更改d
字典,但它指出这是不可能的。您在新代码中尝试做什么?尝试复制只读字典,如dd=d.copy()
,并查看是否可以修改dd
,因为d是只读的。此外,您还可以在我的表单上使用isinstance(v,basestring)
@DavidRobinson检查类型。我有可以打开和关闭的权限。在创建权限时,我选择要启用的权限
我正在尝试启用已选中的权限。我最初收到一个请求。json_body
,但它刚刚停止工作,所以我不得不更改它。在新代码中,我试图将perms
中的值放入一个列表中…@sagarchalise感谢你的想法奏效:)
感谢你的回答,这有点有用,但我只是复制了d
谢谢你的回答,这有点有用,但我只是复制了d