我对python的cgi.FieldStorage()不太熟悉,我在项目中遇到了麻烦。基本上,在我的主页上,我有一个名为标准的html表单。表单的操作调用process.py,它使用FieldStorage()从表单获取输入并生成新的结果页面。它第一次加载正常。
<form action="process.py" name="SearchForm">
<select id="criterion">
<option value="None">None</option>
<option value="result1">Result 1</option>
<option value="result2">Result 2</option>
</select>
<input type = "submit">
</form>
我的问题是在我的process.py中,我使用Python生成与主页面相同的html。因此,结果页面还有一个称为条件的表单,它调用process.py。但是,如果我再次在表单中输入内容,则调用process.py但cgi.FieldStorage完全为空。有可能解决这个问题吗?
编辑:在我的process.py
中import cgi
form = cgi.FieldStorage()
if 'criterion' in form:
table_name = form['criterion'].value
print "Content-Type: text/html\r\n\r\n"
print """\
<html>
<head></head>
<body>
<form action="process.py" name="SearchForm">
<select id="criterion">
<option value="None">None</option>
<option value="result1">Result 1</option>
<option value="result2">Result 2</option>
</select>
<input type = "submit">
</form>"""
select(table_name)
打印“”“\\ “”“
这不是我的所有代码,但这是它的要点。 select(table_name)是用于根据条件的值生成信息的python方法。再次调用process.py,但cgi.fieldstorage()现在为空。
答案 0 :(得分:5)
cgi.FieldStorage()
使用标准输入,因此应该只实例化一次。你确定在任何条件下都不再实例化它吗?该问题的推荐解决方案是将第一个实例放在变量中,并将其作为参数传递给需要访问请求数据的函数。
此外,您可以尝试在表单操作中添加完整的process.py
网址(即http://localhost/process.py
),看看是否有帮助。
答案 1 :(得分:0)
我认为代码会给你一个例外,所以你总是可以使用try / except。这不是最好的方法,但我想它可能有用。
flag = True
try:
form = cgi.FieldStorage()
if 'criterion' in form:
table_name = form['criterion'].value
exception:
# you catch the exception
flag = False
现在使用flag可以控制FieldStorage为空的情况:
if flag:
select(table_name)
else:
# do whatever
pass