テンプレートエンジンを試してみる
みんなのPython Webアプリ編 [みんなのシリーズ] Chapter9の「テンプレートエンジン」のところまで到達。
テンプレートエンジンの原理は分かったつもりになれたので、stringモジュールに含まれるTemplateクラスを使って実際にやってみる。これまで、モジュールの中にPythonコードとHTMLが混在していたのを分離してコードを見やすくすることを目的とする。
クライアント側の画面は以下のHTMLファイルを表示する。
<html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> </head> <body> <form action="/cgi-bin/idandpassdb2.py" method="POST"> Input user ID and password<br /> <input type="text" name="usrid" size="10" maxlength="10"/><br /> <input type="password" name="passwd" size="10" maxlength="10"/> <br /> <input type="submit" name="submit" /> </form> </body> </html>
ユーザがusridとpasswdという2つの情報を入力して、submitする。サーバ側の処理は、以下のスクリプト(idandpassdb2.py)が行う。
#!/usr/bin/env python import cgi from os import path from string import Template form = cgi.FieldStorage() userid = form.getvalue('usrid', '') userps = form.getvalue('passwd', '') dat={} dat['data1'] = userid dat['data2'] = userps f=open(path.join(path.dirname(__file__), 'idandpassform.html')) t=Template(f.read()) body = t.substitute(dat) print "Content-type: text/html\n" print body
入力された情報を返して画面に表示するだけなんだが...。使用するテンプレートは、以下のidandpassform.html。
<html> <body> received id : ${data1}<br /> password: ${data2} </body> </html>
これでうまくいくのだが、スクリプトの中の
print "Content-type: text/html\n"
の行が邪魔だよな。ヘッダの部分に当たるのだろうけど、これをテンプレートファイルに移動させると(テンプレートにヘッダを書き込むと)エラーになって表示できない。あと一歩なのだが、まだまだ基本的なところの理解が足りないということだな。これはこれとして、次、Chapter10へ。