pyramidでテンプレートを使う(light weight)
1ファイルのアプリケーションでテンプレートを使う方法を説明します。
1. (デフォルトでインストールされる)makoを使う方法
2. jinja2を使う方法
の2つの方法を説明します。
はじめはテンプレートを使わないhello anyoneと表示されるだけのアプリからスタートします。
download: https://gist.github.com/gists/1610865/download
まだ、このアプリはテンプレートを利用していません。
テンプレートを利用するには、利用するテンプレートの設定を行う必要があります。
mako
mako: http://www.makotemplates.org/
(あとで説明を書く)
今回のコード(hellomako.py)は、カレントディレクトリにテンプレートを置く設定です。実際の作業時には各自適切な位置を設定するべきです。
hello_contextの辞書の内容がテンプレート中のrequest.contextに引き継がれます。
テンプレートを使わない叛との違いはこれだけです。
$ diff -u helloapp.py hellomako.py
--- helloapp.py 2012-01-14 17:55:23.544759069 +0900 +++ hellomako.py 2012-01-14 19:07:06.984759067 +0900 @@ -3,19 +3,26 @@ from pyramid.config import Configurator from wsgiref.simple_server import make_server from pyramid.view import view_config -from pyramid.response import Response -@view_config(route_name="hello") +def hello_context(request): + return {"name": "foo"} + +@view_config(route_name="hello", renderer="hello.mak") def hello_view(request): - return Response("hello anyone.") + return {} if __name__ == '__main__': # configuration settings - settings = {} + settings = {"mako.directories": "."} #ここtemplateを格納するディレクトリを指定する # configuration setup - config = Configurator(settings=settings) - config.add_route("hello", "/") # hello viewを"/"に割り当てる - config.scan() #これで設定が有効になる。 + config = Configurator(settings=settings, root_factory=hello_context) + config.add_route("hello", "/") + config.scan() + + print "===" + print config.get_settings()["mako.directories"] + print "===" + # serve app app = config.make_wsgi
jinja2
jinja2: http://jinja.pocoo.org/
(あとで説明を書く)
pyramid.jinja2(http://readthedocs.org/docs/pyramid_jinja2/en/latest/)を使います。
setup
$ pip install pyramid_jinja2
pyramidの拡張を追加する方法
config.includeを使います。
$ diff -u hellomako.py hellojinja2.py
makoを使う叛との違いはこれだけです。
--- hellomako.py 2012-01-14 19:07:06.984759067 +0900 +++ hellojinja2.py 2012-01-14 19:15:06.354759065 +0900 @@ -7,20 +7,21 @@ def hello_context(request): return {"name": "foo"} -@view_config(route_name="hello", renderer="hello.mak") +@view_config(route_name="hello", renderer="hello.jinja2") def hello_view(request): return {} if __name__ == '__main__': # configuration settings - settings = {"mako.directories": "."} #ここtemplateを格納するディレクトリを指定する + settings = {"jinja2.directories": "."} #ここtemplateを格納するディレクトリを指定する # configuration setup config = Configurator(settings=settings, root_factory=hello_context) + config.include("pyramid_jinja2") config.add_route("hello", "/") config.scan() print "===" - print config.get_settings()["mako.directories"] + print config.get_settings()["jinja2.directories"] print "===" # serve app
設定ファイルに書く方法
モジュールを分けて開発している場合には、以下のように書きます。
書く場所は、development.iniやproduction.iniなどです。
jinja2.directories = "%(here)s/templates" #hereはプロジェクトディレクトリのパスが自動的に設定される。
この設定の場合ですが、仮にhelloプロジェクト*1の場合には
hello/templates/hello.jinja2
などを見に行くような設定となります。
これはmakoを使う際も同様です。
todo
- resourceについての説明
- resourceオブジェクトが普通
*1:pcreate helloでscaffoldした環境