ブラウザは HTML ドキュメントを表示します。HTML ドキュメントでは、要素内にテキストを含めるだけdiv
で、span
、p
、 などのタグにテキストを含めることができます。たとえば<div>Hello!</div>
、テキストを表示しますHello
。ただし、画像が直接含まれているわけではありません。代わりに、タグの として画像へのリンクが含まれています。たとえば、foo.png イメージを表示します。src
img
<img src="http://example.com/foo.png">
したがって、やりたいことを行うには2つの方法があります。
簡単な方法は、(別々の URL で) 2 つのリソースを公開することです: (1) PNG 画像、および (2) PNG 画像へのリンクを含む (テキストを直接含む) HTML ページ。
例えば…</p>
testpie_image.py:
print "Content-type: image/png\n"
print open(r"/var/www/cgi-bin/testpie.png", "rb").read()
testpie.py:
print """Content-type: text/html
<html><head></head><body>
<img src="testpie_image.py" />
<div>{}</div>
</body></html>
""".format(open(r"/var/www/html/test.txt").read())
ここで、誰かが を参照するとhttp://example.com/cgi-bin/testpie.py
、2 番目のスクリプトがトリガーされ、次のような HTML ページが表示されます。
<html><head></head><body>
<img src="testpie_image.py" />
<div>Blah blah this is my text file.</div>
</body></html>
ブラウザは へのリンクをたどりhttp://example.com/cgi-bin/testpie-image.py
ます。これにより、最初のスクリプトがトリガーされ、PNG 画像が取得されます。
より難しい方法は、 と呼ばれる特別な種類の URL スキームdata:
を使用することです。これにより、別のリソースへのリンクであるかのようにデータをインラインで埋め込むことができます。埋め込むにはもう少し作業が必要ですが、必要な URL は 2 つではなく 1 つだけです。
print """Content-type: text/html
<html><head></head><body>
<img src="data:image/png;base64,{}"</img>
<div>{}</div>
</body></html>
""".format(open(r"/var/www/cgi-bin/testpie.png", "rb").read().encode("base64"),
open(r"/var/www/html/test.txt").read())
これで、誰かが を参照するhttp://example.com/cgi-bin/testpie.py
と、次のような HTML ページが表示されます。
<html><head></head><body>
<img src="data:image/png;base64,1Ab…
Z2y" />
<div>Blah blah this is my text file.</div>
</body></html>
こんにちは、HTML ファイルから Python ファイルを実行しています。テキスト ボックスにキーワードを入力して [送信] をクリックすると、Python ファイルが実行されます。そのため、python ファイルは 1) .png と 2) テキスト ファイルの 2 つのファイルを生成します。私の要件は、HTMLで送信をクリックするとすぐに.pngおよび.txtファイルをWebブラウザーに表示することです。
わかりました、説明させてください。
従来の CGI サーバーに接続された従来のフォーム送信を使用していると仮定します。Web ブラウザーで送信ボタンをクリックすると、HTML ドキュメントを作成する CGI スクリプトに要求が送信されます。このドキュメントにはテキスト ファイルが含まれており、2 つ目の CGI スクリプトにリンクされた画像も含まれています。Web ブラウザーは、2 番目の CGI へのリンクをたどることによって、画像を自動的に読み込みます。これにより、PNG ファイルが生成されて返され、表示されます。したがって、画像とテキストが 1 つのブラウザー ページに表示されます。
最後に 1 つ: テキスト ファイルを /var/www 階層内に配置したくないでしょう。また、data:
URL を使用している場合は、そこに画像ファイルを配置したくないでしょう。