12: jinja2
テンプレート(12: Templating With jinja2
)¶
Pyramidはテンプレート言語を別のフレームワークよりも好まないと言っただけです。それを証明する時間です。Jinja2は人気のあるテンプレートシステムでFlaskで使用されて、Djangoのテンプレートをモデルにしています。Pyramidアプリケーションでは、Jinja2を renderer として使用できるようにするPyramid add-on pyramid_jinja2
を追加しましょう。
目的(Objectives)¶
- さまざまなテンプレートシステムに対するPyramidのサポートを示します。
- Pyramidアドオンのインストールについて学びます。
手順(Steps)¶
この手順では、まず
view_class
でのディレクトリをコピーしてからpyramid_jinja2
アドオンをインストールします。$ cd ..; cp -r view_classes jinja2; cd jinja2 $ $VENV/bin/pip install -e . $ $VENV/bin/pip install pyramid_jinja2
jinja2/tutorial/__init__.py
内でpyramid_jinja2
を含める必要があります:1 2 3 4 5 6 7 8 9 10
from pyramid.config import Configurator def main(global_config, **settings): config = Configurator(settings=settings) config.include('pyramid_jinja2') config.add_route('home', '/') config.add_route('hello', '/howdy') config.scan('.views') return config.make_wsgi_app()
jinja2/tutorial/views.py
でrenderer
を変更します:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
from pyramid.view import ( view_config, view_defaults ) @view_defaults(renderer='home.jinja2') class TutorialViews: def __init__(self, request): self.request = request @view_config(route_name='home') def home(self): return {'name': 'Home View'} @view_config(route_name='hello') def hello(self): return {'name': 'Hello View'}
テンプレートに
jinja2/tutorial/home.jinja2
を追加:<!DOCTYPE html> <html lang="en"> <head> <title>Quick Tutorial: {{ name }}</title> </head> <body> <h1>Hi {{ name }}</h1> </body> </html>
テストを実行してください:
$ $VENV/bin/py.test tutorial/tests.py -q .... 4 passed in 0.40 seconds
Pyramidアプリケーションを以下のように実行します:
$ $VENV/bin/pserve development.ini --reload
ブラウザで http://localhost:6543/ を開きます。
分析(Analysis)¶
PyramidアドオンをPyramidに追加するのは簡単です。まず、通常のPythonパッケージインストールツールを使用してアドオンパッケージをPythonの仮想環境にインストールします。アドオンでセットアップコードを実行するようにPyramidのコンフィギュレータに指示します。この場合はセットアップコードはPyramidに対して、.jinja2ファイル拡張子を検索する新しい「レンダラー」を使用可能にするよう指示しました。
ビューのコードはほとんど変わりませんでした。レンダラー上のファイル拡張子を変更しました。テンプレートを見るとChameleonとJinja2の基本となる変数を挿入する構文は非常に似ています。
エクストラクレジット(Extra credit)¶
- 私たちのプロジェクトは現在、
pyramid_jinja2
に依存しています。その依存関係を手動でインストールしました。私たちが関わりを作成できる別の方法は何でしょうか? - Configurator に
pyramid_jinja2
の設定をロードさせるための必須設定であるconfig.include
を使用しました。configに含めることができる別の方法は何でしょうか?