如何在python cgi中迭代表单值?新手

时间:2013-12-05 11:28:28

标签: python cgi

假设我有一个包含多个字段的表单。在我的cgi中我使用了所有的值。例如

res1 = form.getvalue("opt_1")
res2 = form.getvalue("opt_2")
res3 = form.getvalue("opt_3") 
res4 = form.getvalue("opt_4")
res5 = form.getvalue("opt_5")
       ...
       ...
res100 = form.getvalue("opt_100")

在我的cgi中,我使用for循环来获取值

for i in range(1, 100):
    res[i] = form.getvalue('opt_[i]')
    print res[i]

我收到错误:NameError:未定义全局名称'res'

2 个答案:

答案 0 :(得分:2)

你的循环存在两个问题:首先,res尚不存在,因此尝试分配给它的项目将无效。其次,如果您首先将其创建为空列表,则无法通过写入结束来扩展它。

使用列表推导来修复两者:

res = [form.getfirst('opt_{}'.format(i)) for i in range(1, 100)]

这会将opt_1的值设置为res[0],依此类推 - 如果这是一个问题,您可以在它的开头添加一个虚拟元素:

res = [None] + [form.getfirst('opt_{}'.format(i)) for i in range(1, 100)]

或改为使用字典:

res = {i: form.getfirst('opt_{}'.format(i)) for i in range(1, 100)}

请注意,根据docs,您应该避免使用getvalue,因为它可能会返回 字符串列表,具体取决于用户输入。使用form.getfirst来保证您将拥有一个字符串。

答案 1 :(得分:1)

您似乎尚未定义res,请先定义它:

res = []
for i in range(1, 100):
    res.append(form.getvalue('opt_%d'%i))
    print res[i-1]

其中res是包含form.getvalue('opt_i') s。

结果的列表