動機
mod_pythonを入れたあとはGenshiとの連携が必要だなと思った。
方法
Genshiの簡単な使い方はここに書いたとおり。
上記のエントリで書いたテンプレートから生成されるHTMLをmod_pythonで表示させてみようと思う。まずhttpd.confの設定から。ここにある感じで設定。
<Directory "/path/to/app"> AddHandler mod_python .py PythonHandler test PythonDebug On </Directory>
で、実行するスクリプトであるtest.pyにはhandler()メソッドを定義してあげる。
from mod_python import apache from genshi.template import TemplateLoader import os TEMPLATE_DIR = os.path.dirname(__file__) loader = TemplateLoader([TEMPLATE_DIR]) tmpl = loader.load(os.path.join(TEMPLATE_DIR, 'template.html')) title = 'test' entries = [{'url':'http://www.google.com','title':'Google'}, {'url':'http://www.yahoo.com','title':'Yahoo!'}, {'url':'http://d.hatena.ne.jp/ymotongpoo/','title':'YAMAGUCHI::weblog'}] stream = tmpl.generate(title=title, entries=entries) def handler(req): req.content_type = 'text/html' req.send_http_header() req.write(stream.render('html')) return apache.OK
ここで注意するのが、TEMPLATE_DIRとかの扱い。フルパスを指定してあげないとちゃんとファイルを読み込めない。もしSQLiteとか使うなら同様に指定してあげないと
OperationalError: unable to open database file
と出てしまいます。
あと、handler()メソッドで最初にContent TypeとHTTPヘッダをきちんと送信しないとテキストがそのままブラウザに表示されてしまうのでコレも注意。
で、http://host.domain/app/test.pyにアクセスすると表示されました。