1

我有一个 cgi 脚本,其中包含一个选择框,最终用户可以在其中提交多个选项或只提交一个选项。这个选择标签被命名为“参数”。看这里的例子....

http://www.w3schools.com/tags/tryit.asp?filename=tryhtml_select_multiple

当提交此表单并选择多个选项时,URL 看起来像这样......

http........mycgiscript.py?parameters=option1value¶meters=option2values

或者如果用户只选择了一个选项,它看起来像这样......

http........mycgiscript.py?parameters=option3value

我的表格被声明为...

import cgi
form = cgi.FieldStorage()

所以当用户选择多个选项并提交表单时,form['parameters'] 的数据类型是一个列表,而当用户只选择一个选项并提交时,form['parameters'] 的数据类型是一个实例...

多个选项(作为列表返回):

[MiniFieldStorage('parameters', 'option1value'), MiniFieldStorage('parameters', 'option2value')] 

单一选项(作为实例返回):

MiniFieldStorage('parameters', 'option3value') 

我的问题是……

由于 form['parameters'] 可以是列表或实例,具体取决于用户提交的内容;处理这两种数据类型的最佳方法是什么?我想要的输出是一个列表变量,其中包含在表单上选择的 optionsXvalues。到目前为止,我能做的最好的就是这个......

if type(form['parameters']) == type([]):
    l = [ x.value for x in form['parameters'] ]
else:
    l = [form['parameters'].value]

我这样做是因为当用户选择多个选项时,简单地使用 form['parameters'].value 会产生以下异常。

AttributeError: 'list' object has no attribute 'value'

那么有没有比我上面基于 if/else 语句的建议更好的方法?我希望你们中的一些 python 大师能够提出一个更好的方法来做到这一点。

4

1 回答 1

4

你可以做的是使用:

form.getlist('参数')

这提供了具有相同名称的所有不同输入类型的值,即参数。

这是我在 20.2.2 中从http://docs.python.org/2/library/cgi.html收集的内容,他们建议当您期望可能有多个具有相同名称字段的项目时就是这种情况。

希望这会有所帮助,尽管我认为您自己已经找到了。

于 2013-05-02T20:40:05.973 回答