Google App Engine のテンプレートで、カスタムフィルターを使う方法。
フォルダ構成はこんな感じ。
カスタムフィルターは、apps.frontend.lib.custom_filters モジュールに定義されている。
リクエストハンドラは、apps.frontend.main モジュールの中。
まずは、テンプレートライブラリにカスタムフィルタのモジュールを登録する。
apps/frontend/main.py
そして、カスタムフィルタモジュールの中で、フィルタを登録する。
apps/frontend/lib/custom_fliters.py
これで、カスタムフィルタの準備は完了。
テンプレートでいきなり使える。
テンプレート内で load タグを使う必要はない。
ふ~・・・
長かった。
Django と gae のカラミがいまいちよく分からない。
カスタムフィルタを使う方法を探していたら、Django の設定をハッキングするような手法が数多く見つかった。
ひととおり試したが、どれもうまくいかなかった。
ここで上げた方法は、動作はしたが、実行パフォーマンスにムダがある。
不要なときであってもカスタムフィルタをロードしてしまう。
リクエストハンドラの中で、いちいち必要なフィルタモジュールだけを登録する、という方法も考えられるが、それだとコントローラとビューの分離がアヤしくなってくる。
Django では、テンプレート中に load タグを使えば、この問題は避けられる。
GAE には、この load タグに相当するような方法が用意されているのだろうか。
逆引き辞書的なモノが欲しくなってくるね。
Ruby レシピブックみたいな。
フォルダ構成はこんな感じ。
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 レシピブックみたいな。
コメントする