我有一个 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 大师能够提出一个更好的方法来做到这一点。