読者です 読者をやめる 読者になる 読者になる

pyramidで開発環境と本番環境でタイトルの表示を切り分ける方法

pyramidで作成した管理画面で本番と開発環境でタイトルを切り分けたいとの要望があったのでその対応した時の手順を記します。
プロジェクトの構成は下記となります。

$ pcreate -s starter taka512
$ tree
taka512
|- development.ini
|- production.ini
|- setup.cfg
|- setup.py
|- taka512
    |- __init__.py
    |- static
    |- templates
    |  |- mytemplate.pt
    |- views.py

1.設定ファイルに環境切替用の変数を記述

development.iniとproduction.iniに「taka512.env」と1行追加してそれぞれ「development」と「production」を指定します。

$ cd taka512
$ vi development.ini
[app:main]
use = egg:taka512

pyramid.reload_templates = true
pyramid.debug_authorization = false
pyramid.debug_notfound = false
pyramid.debug_routematch = false
pyramid.default_locale_name = en
pyramid.includes =
    pyramid_debugtoolbar

taka512.env = development

2.環境変数で開発と本番を判定するutilを作成
「is_dev」メソッドを作成します。

$ mkdir taka512/utils
$ touch taka512/utils/__init__.py
$ vi taka512/utils/common.py
from pyramid.threadlocal import get_current_registry

def is_dev():
    settings = get_current_registry().settings
    if(settings.get('taka512.env') == 'development'):
        return True
    else:
        return False

3.環境変数によって開発と本番用の文字列を取得するヘルパーを作成
先ほど作成したis_devを使用して「get_env_display」を作成します。

$ mkdir taka512/helpers
$ touch taka512/helpers/__init__.py
$ vi taka512/helpers/helper.php
#--* encoding: utf-8 *-- 
from taka512.utils.common import is_dev

def get_env_display():
    if(is_dev()):
        return u'開発'
    else:
        return u'本番'

4.ヘルパーを設定
テンプレートからヘルパーメソッドを呼び出すための設定を追加します。
「add_renderer_globals」の設定で「h.~」でヘルパーメソッドがテンプレートから呼べるようになります。

$ vi taka512/__init__.py
from pyramid.config import Configurator
from pyramid.events import BeforeRender
from taka512.helpers import helper

def main(global_config, **settings):
    """ This function returns a Pyramid WSGI application.
    """
    config = Configurator(settings=settings)
    config.add_subscriber(add_renderer_globals, BeforeRender)

    config.add_static_view('static', 'static', cache_max_age=3600)
    config.add_route('home', '/')
    config.scan()
    return config.make_wsgi_app()

def add_renderer_globals(event):
    event['h'] = helper

テンプレートからヘルパーを呼び出し
「${h.get_env_display()}」でヘルパーを呼び出します。jinjaであれば「{{ h.get_env_display() }}」となります。

$ vi taka512/templates/mytemplate.pt
~略~
    <div id="middle">
      <div class="middle align-center">
        <p class="app-welcome">
          Welcome to <span class="app-name">${project}${h.get_env_display()}</span>, an application generated by<br/>
          the Pyramid web application development framework.
        </p>
      </div>
    </div>
~略~

下記のように「開発」と表示されれば成功です!

f:id:taka512:20130905001351p:plain