12: jinja2 テンプレート(12: Templating With jinja2)

Pyramidはテンプレート言語を別のフレームワークよりも好まないと言っただけです。それを証明する時間です。Jinja2は人気のあるテンプレートシステムでFlaskで使用されて、Djangoのテンプレートをモデルにしています。Pyramidアプリケーションでは、Jinja2を renderer として使用できるようにするPyramid add-on pyramid_jinja2 を追加しましょう。

目的(Objectives)

  • さまざまなテンプレートシステムに対するPyramidのサポートを示します。
  • Pyramidアドオンのインストールについて学びます。

手順(Steps)

  1. この手順では、まず view_class でのディレクトリをコピーしてから pyramid_jinja2 アドオンをインストールします。

    $ cd ..; cp -r view_classes jinja2; cd jinja2
    $ $VENV/bin/pip install -e .
    $ $VENV/bin/pip install pyramid_jinja2
    
  2. 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()
    
  3. 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'}
    
  4. テンプレートに jinja2/tutorial/home.jinja2 を追加:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <title>Quick Tutorial: {{ name }}</title>
    </head>
    <body>
    <h1>Hi {{ name }}</h1>
    </body>
    </html>
    
  5. テストを実行してください:

    $ $VENV/bin/py.test tutorial/tests.py -q
    ....
    4 passed in 0.40 seconds
    
  6. Pyramidアプリケーションを以下のように実行します:

    $ $VENV/bin/pserve development.ini --reload
    
  7. ブラウザで http://localhost:6543/ を開きます。

分析(Analysis)

PyramidアドオンをPyramidに追加するのは簡単です。まず、通常のPythonパッケージインストールツールを使用してアドオンパッケージをPythonの仮想環境にインストールします。アドオンでセットアップコードを実行するようにPyramidのコンフィギュレータに指示します。この場合はセットアップコードはPyramidに対して、.jinja2ファイル拡張子を検索する新しい「レンダラー」を使用可能にするよう指示しました。

ビューのコードはほとんど変わりませんでした。レンダラー上のファイル拡張子を変更しました。テンプレートを見るとChameleonとJinja2の基本となる変数を挿入する構文は非常に似ています。

エクストラクレジット(Extra credit)

  1. 私たちのプロジェクトは現在、pyramid_jinja2 に依存しています。その依存関係を手動でインストールしました。私たちが関わりを作成できる別の方法は何でしょうか?
  2. Configuratorpyramid_jinja2 の設定をロードさせるための必須設定である config.include を使用しました。configに含めることができる別の方法は何でしょうか?