2014年4月18日金曜日

Pyramid 1.5 mako -> jinja2

Python Pyramid 1.4 を 1.5 にしたときのメモ。
テンプレートの扱いが変わってしまったので、ソースを修正しないと動かなくなってしまった。
テンプレートは mako を使用中。
環境についてはこう。
Mac OS X 10.9.2
Python 2.7.6

Pyramid については、ここを参照。

  1. development.ini
    テンプレートファイルが入っているディレクトリの設定はそのまま。
    mako.directories = my_project:templates

  2. setup.py
    ここは、requires に 'pyramid_mako' を追加する。
    requires = [
        'pyramid_mako',
        'pyramid',
    

  3. my_project/__init__.py
    config = Configurator(settings=settings, の後にこれを追加。
    config.include('pyramid_mako')
    

    テンプレートファイルの拡張子に .html を追加するところは、こう修正した。
    これがなかなかわからなかった。
    <修正前>
    config.add_renderer(".html", "pyramid.mako_templating.renderer_factory")
    
    <修正後>
    config.add_mako_renderer('.html', settings_prefix='mako.')
    

  4. views.py の renderer の設定は前のまま
    そのまま「renderer='home.html'」などとすることができる。
    @view_config(route_name='home', renderer='home.html', permission='edit', request_method="GET")
    

これで動くはず。
mako もいいけど jinja2 にしたい、という場合は「config.add_renderer()」のところと「mako.directories = pypwm:templates」をどうしたらよいのでしょう。
ついでにちょっとやってみる。

  1. development.ini
    pyramid.includes に pyramid_jinja2 を追加する。
    それと、jinja2.directories の設定。
    pyramid.includes =
        pyramid_jinja2
    #    pyramid_debugtoolbar
        pyramid_tm
    
    jinja2.directories = my_project:templates
    

  2. setup.py
    requires = [
        'pyramid_jinja2',
        'pyramid',
    

  3. my_project/__init__.py
    config.add_jinja2_search_path も追加する。
    config.include('pyramid_jinja2')
    config.add_renderer(".html", "pyramid_jinja2.renderer_factory")
    config.add_jinja2_search_path("pypwm:templates")
    


こんな感じでした。
mako テンプレートを jinja2 に書き換える方がたいへんです。

mako jinja2
コメント
## for maco
<%doc>multi line</%doc>
{# for jinja2 #}
{# multi line #}
include
<%include file="my_header.html"/>
{% include "my_header.html" %}
request.
static_url
など
"${request.static_url(
'pypwm:static/my.css')}"

${request.route_url('home')}
{{ request.application_url }}
/static/my.css"

{{ request.application_url }}/home
for loop
% for item in items:
% endfor
{% for item in items -%}
{%- endfor %}
if
% if xxx == 'yyy':
% else:
% endif
{% if xxx' == 'yyy' %}
{% else %}
{% endif %}
変数
${my_var}
{{ my_var }}

0 件のコメント:

コメントを投稿