访问ImmutableMultiDi中的动态输入名称

2024-09-25 10:28:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我从wtforms得到了这个:

ImmutableMultiDict([('csrf_token', u'1422930083.22##139a472d31a0bbb37c25fee616b8b5bd5a38e37a'), ('27', u'y'), ('type', u'job')])

我能行

^{pr2}$

获取类型值。但是27怎么样?名称可以更改,因此在另一种形式中可以是25。在

如何访问该输入字段?不可变多字词可以转换吗?我无法弹出ImmutableMultiDict中的任何元素

TypeError: 'ImmutableMultiDict' objects are immutable

Tags: 名称token元素类型objectstypejobcsrf
2条回答

这种方式对我很好:

data_form = {}

for fieldname, value in request.form.items():
    data_form[fieldname] = value

data_form.pop("csrf_token", None)
data_form.pop("type", None)

print data_form

也许这会有帮助。通常我不使用不可变多段式,所以也许有更好的方法。但假设dict始终有3个元素,其中两个元素是“csrf_token”和“type”,则可以获得第三个未知密钥的名称,如下所示:

from  werkzeug.datastructures import ImmutableMultiDict

imd = ImmutableMultiDict([('csrf_token', u'1422930083.22##139a472d31a0bbb37c25fee616b8b5bd5a38e37a'), 
                          ('27', u'y'), 
                          ('type', u'job')])

for k in imd:
    if k not in ['csrf_token','type']:
        last_key = k
        print(last_key)
        break

print(imd[last_key])

结果是:

^{pr2}$

请注意,循环是必需的,因为dict是无序的,所以您永远不知道dict中键的存储顺序。在

相关问题 更多 >