我从HTML表单发送数据,我用python(Pyramid框架)处理它,这就是我在我看来的内容:
@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
只读?
答案 0 :(得分:4)
你不需要做你正在做的事情:)只需使用request.getall('perm')
,它将始终返回一个列表。
WebOb请求的几个属性是“multidict”;结构 (例如request.GET,request.POST和request.params)。多元化 是一个字典,其中一个键可以有多个值。该 典型的例子是一个查询字符串,如?pref = red& pref = blue;该 pref变量有两个值:红色和蓝色。
在一个多指单中,当你提出请求时。获取[' pref']你只会回来 '蓝色' (pref的最后一个值)。有时返回一个字符串,和 有时候返回一个列表,是频繁出现异常的原因。如果 如果你想要所有的值,请使用request.GET.getall(' pref')。如果你 想要确保只有一个值,请使用 request.GET.getone(' pref'),如果存在则会引发异常 对于pref。零个或多个值。
http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/webob.html
(您也不应该尝试修改request.params
的值,这是只读的。请改用单独的dict。)