18.7 处理一个字段的多个输入
在HTML的表单中可以为一个名称设置多个值。您可以使用checkbox或多选框。或者您可以为一个名称指派多个输入元素。
cgi模块通过FieldStorage实例中的getlist()方法来处理这种情况。它可以返回一个列表,其中含有某个特殊字段的所有值。下面是一个例子,它向用户呈现出一些列表,并指明哪个被选择。
#!/usr/bin/env python
# CGI list example - Chapter 18 - list.cgi
import cgitb
cgitb.enable()
import cgi, os, urllib
print "Content-type: text/html"
print """<HTML>
<HEAD>
<TITLE>CGI List Example</TITLE></HEAD><BODY>"""
form = cgi.FieldStorage()
print "You selected: "
selections = form.getlist('data')
printable = [cgi.escape(x) for x in selections]
print ", ".join(printable)
print """<FORM METHOD="GET" ACTION="%s">
Select some things:<P>""" % os.environ['SCRIPT_NAME']
for item in ['Red', 'Green', 'Blue', 'Black', 'White', 'Purple',
'Python', 'Perl', 'Java', 'Ruby', 'K&R', 'C++', 'OCaml', 'Haskell',
'Prolog']:
print '<INPUT TYPE="checkbox" NAME="data" VALUE="%s">' % cgi.escape(item)
print ' %s<BR>' % cgi.escape(item)
print """<INPUT TYPE="submit" NAME="submit" VALUE="Submit">
</FORM>
</BODY></HTML>"""
试验这个程序并运行它,选择C++、Haskell和Blue,然后点击Submit。
注意,程序会在“You Selected”区域列出这3个条目。还请注意我的系统中的URL为(http://localhost:8765/cgi-bin/list.cgi?data=Blue&data=C%2B%2B&data=Haskell&submit=Submit)。这里,data重复出现了3次。使用其他方法来为同一个字段名指定多个实例也会得到类似的URL。







