假设我有一个包含多个字段的表单。在我的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'
答案 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。