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> ~略~
下記のように「開発」と表示されれば成功です!