Google App Engine のテンプレートでカスタムフィルタを使う

| コメント(0) | トラックバック(0)
Google App Engine のテンプレートで、カスタムフィルターを使う方法。

フォルダ構成はこんな感じ。

root
│  app.yaml
│  
├─apps
│  │  __init__.py
│  │  
│  └─frontend
│      │  main.py
│      │  __init__.py
│      │  
│      ├─lib
│      │      custom_filters.py
│      │      __init__.py
│      │     
│      └─template
│              index.html
│              show.html
│              
└─lib
        model.py
        __init__.py


カスタムフィルターは、apps.frontend.lib.custom_filters モジュールに定義されている。
リクエストハンドラは、apps.frontend.main モジュールの中。

まずは、テンプレートライブラリにカスタムフィルタのモジュールを登録する。

apps/frontend/main.py
from google.appengine.ext.webapp import template
webapp.template.register_template_library('apps.frontend.lib.custom_filters')

そして、カスタムフィルタモジュールの中で、フィルタを登録する。

apps/frontend/lib/custom_fliters.py
from google.appengine.ext import webapp
register = webapp.template.create_template_register()

@register.filter
def append(value, arg):
    return value + arg

これで、カスタムフィルタの準備は完了。
テンプレートでいきなり使える。

テンプレート内で load タグを使う必要はない。


ふ~・・・
長かった。

Django と gae のカラミがいまいちよく分からない。

カスタムフィルタを使う方法を探していたら、Django の設定をハッキングするような手法が数多く見つかった。
ひととおり試したが、どれもうまくいかなかった。

ここで上げた方法は、動作はしたが、実行パフォーマンスにムダがある。
不要なときであってもカスタムフィルタをロードしてしまう。
リクエストハンドラの中で、いちいち必要なフィルタモジュールだけを登録する、という方法も考えられるが、それだとコントローラとビューの分離がアヤしくなってくる。

Django では、テンプレート中に load タグを使えば、この問題は避けられる。
GAE には、この load タグに相当するような方法が用意されているのだろうか。


逆引き辞書的なモノが欲しくなってくるね。
Ruby レシピブックみたいな。

トラックバック(0)

トラックバックURL: http://mikagamikobo.com/cgi/MTOS-4.21-ja/mt-tb.cgi/144

コメントする

2009年12月

    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

アーカイブ