PythonでWebページ?

Pythonで動的な、又はプログラマブルなWebページを作る方法・ツールは、私が最近調べただけでも、割とピンキリである。いくらかを自分用に纏めておく。

CGI

CGIというのは、スクリプト言語Pythonに限らず、PHPPerlなど)を記述するシステムと表現すれば良いのだろうか。頭に

#!/bin/usr/python

とか書いて、拡張子を.cgiにすれば、立派なCGIスクリプトである。

基本的には、printでHTMLを書いていけばいい。頭に

print "Content-Type: text/html"

と付ければOK。text/plainもあるけど、流石にplainでは…。

詳細は以下のサイトとか見たりすると良いかも

http://www.gesource.jp/programming/python/cgi/

テンプレートエンジン

CGIはprint文でHTML書いたりする訳だが、プログラムに直接HTMLタグ等を書くのはスマートじゃない。どうせページの全てをプログラミングする必要は無く、大抵は一部分だけなのである。

従って、HTMLの文法を拡張して、必要な部分は後で埋め込みができるようなHTML+αなテキストデータを処理するようなのがあると便利である。これがテンプレートエンジンである。

テンプレートエンジンも割とピンキリで、メジャーなものは、以下のブログで紹介されている。

http://labs.unoh.net/2007/05/python_1.html

Jinja2

テンプレートエンジンの1つにJinjaと呼ばれるものがある。実はコイツは後で説明するDjangoのテンプレートエンジンの部分をそっくり持ってきたものである。(どちらが先かは知らないが、Djangoの方が有名なので)

これに関してはそこそこ弄っているので後程纏める。

テンプレートシステム(?)

実際に巨大なサイトを作るにはテンプレートシステムを使うのが最良である。サイト一式を作るのに多くの場合必要となるようなシステムは、テンプレートシステムを使えば簡単に開発できる。

…というのがウリらしい。自分はそこまで大仰な物が必要ないので齧っただけで投げてしまった。1ページで収まるような簡単なものを書くにはあまり向かない。ただ個人的に目を引いたのは、ユーザ認証のシステムを簡単に作れるらしい、という点であろうか。逆に言えばそれぐらい大規模なシステム向けで真価を発揮するようだ。当然ながらテンプレートエンジンを内包している。

私が齧ったものとしては、PylonとDjangoがある。どちらかというと、Djangoの方が簡単な印象である。

JavaScriptを書く

逆に、HTMLにPythonコードを埋め込みたいこともあるかもしれない。しかしそんなことができるのは、基本的にはJavaScriptだけである。

従って、JavaScriptのコードを出力するCGIを、以下のように呼び出せば宜しい。

<script type="text/javascript" src="hoge.cgi"></script>

hoge.cgiJavaScriptのコードをprintするようなPythonコードを書けばOK。ここまで読めば分かると思うが、HTMLにHTMLを埋め込む場合、この手法は使えない。