4

私は Python の cgi.FieldStorage() にあまり慣れていないため、プロジェクトで問題が発生しています。基本的に、私のメイン ページには、基準という名前の html フォームがあります。フォームのアクションは、 FieldStorage() を使用してフォームから入力を取得し、新しい結果ページを生成する process.py を呼び出します。初めて問題なくロードされます。

 <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)  

print """\
"""

これは私のコードのすべてではありませんが、これが要点です。select(table_name) は、基準の値に応じて情報を生成するために使用する python メソッドです。もう一度、process.py が呼び出されていますが、cgi.fieldstorage() は現在空です。

4

2 に答える 2

5

cgi.FieldStorage()は標準入力を消費するため、一度だけインスタンス化する必要があります。どのような条件下でも、もう一度インスタンス化しないでよろしいですか? この問題に対する推奨される解決策は、最初のインスタンスを変数に配置し、それを引数として要求データへのアクセスが必要な関数に渡すことです。

また、フォーム アクションに完全なprocess.pyURL (つまり)を入れてみて、それが役立つかどうかを確認することもできます。http://localhost/process.py

ソース: http://docs.python.org/2/library/cgi.html

于 2013-04-23T10:02:30.023 に答える