エンド ユーザーが複数のオプションまたは 1 つのオプションのみを送信できる選択ボックスを含む cgi スクリプトがあります。この選択タグの名前は「パラメーター」です。例については、こちらを参照してください....
http://www.w3schools.com/tags/tryit.asp?filename=tryhtml_select_multiple
複数のオプションを選択してこのフォームを送信すると、URL は次のようになります...
http........mycgiscript.py?parameters=option1value¶meters=option2values
または、ユーザーが 1 つのオプションのみを選択した場合は、次のようになります...
http........mycgiscript.py?parameters=option3value
私のフォームは次のように宣言されています...
import cgi
form = cgi.FieldStorage()
したがって、ユーザーが複数のオプションを選択してフォームを送信する場合、form['parameters'] のデータ型はリストですが、ユーザーが 1 つのオプションのみを選択して送信する場合、form['parameters'] のデータ型はリストです。実例...
複数のオプション (リストとして返されます):
[MiniFieldStorage('parameters', 'option1value'), MiniFieldStorage('parameters', 'option2value')]
単一オプション (インスタンスとして返される):
MiniFieldStorage('parameters', 'option3value')
私の質問は....
form['parameters'] は、ユーザーが送信する内容に応じてリストまたはインスタンスになる可能性があるため。これら 2 つのデータ型を処理する最良の方法は何ですか? 必要な出力は、フォームで選択された 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 の第一人者の何人かが、これを行うためのより良い方法を提案できることを期待していました。