Google Code が利用できる言語: English - Español - 日本語 - 한국어 - Português - Pусский - 中文(简体) - 中文(繁體)
コードに HTML を埋め込むのは、面倒な上に管理が困難です。このような場合は、テンプレート システムを使用すると便利です。テンプレート システムでは、アプリケーションのデータが出現する場所を示す特殊な構文を使って、HTML を別ファイルとして維持します。Python 用のテンプレート システムは数多くありますが、EZT、Cheetah、ClearSilver、Quixote、Django などが代表的です。任意のテンプレート エンジンを選び、アプリケーション コードにバンドルして使用してください。
簡便な方法として、webapp モジュールでは、Django のテンプレート エンジンが用意されています。これは SDK にも含まれており、App Engine の一部でもあるため、バンドルしなくても使用できます。
冒頭の helloworld/helloworld.py に次の import 文を追加します。
import os from google.appengine.ext.webapp import template
MainPage ハンドラを、次のようなコードで置き換えます。
class MainPage(webapp.RequestHandler):
def get(self):
greetings_query = Greeting.all().order('-date')
greetings = greetings_query.fetch(10)
if users.get_current_user():
url = users.create_logout_url(self.request.uri)
url_linktext = 'Logout'
else:
url = users.create_login_url(self.request.uri)
url_linktext = 'Login'
template_values = {
'greetings': greetings,
'url': url,
'url_linktext': url_linktext,
}
path = os.path.join(os.path.dirname(__file__), 'index.html')
self.response.out.write(template.render(path, template_values))
helloworld ディレクトリで、index.html という名前のファイルを新しく作成し、次のコンテンツを入れます。
<html>
<body>
{% for greeting in greetings %}
{% if greeting.author %}
<b>{{ greeting.author.nickname }}</b> wrote:
{% else %}
An anonymous person wrote:
{% endif %}
<blockquote>{{ greeting.content|escape }}</blockquote>
{% endfor %}
<form action="/sign" method="post">
<div><textarea name="content" rows="3" cols="60"></textarea></div>
<div><input type="submit" value="Sign Guestbook"></div>
</form>
<a href="{{ url }}">{{ url_linktext }}</a>
</body>
</html>
ページをリロードし、出力を確認します。
template.render(path, template_values) は、テンプレート ファイルまでのパスと、値のディクショナリを取り、レンダリングしたテキストを返します。テンプレートは Django のテンプレート構文を使用して値にアクセスおよび反復し、これらの値のプロパティを参照することができます。多くの場合、データストアのモデル オブジェクトを値として直接渡すことにより、テンプレートからそのプロパティにアクセスすることができます。
ヒント: App Engine アプリケーションでは、プロジェクト、ライブラリ モジュール、その他のファイルでアップロードされたすべてのファイルに読み取り専用でアクセスします。現在の作業ディレクトリはアプリケーションのルート ディレクトリになっているため、index.html へのパスは単に "index.html" となります。
Django テンプレート エンジンに関する詳しい情報は、Django 0.96 テンプレート ドキュメントをご覧ください。
各 Web アプリケーションは、テンプレートまたは何らかのシステムにより、コードで動的に生成した HTML を返します。ほとんどの Web アプリケーションは、画像や CSS スタイルシート、JavaScript ファイルなどの静的コンテンツに対応する必要があります。効率性のため、App Engine では、静的ファイルを、アプリケーション ソースやデータ ファイルとは分けて扱います。App Engine の静的ファイル機能を使用して、アプリケーション用の CSS スタイルシートを供給することができます。
静的ファイルの使用に進みます。