フレーバごとに表現を変えるタグを作る

テンプレートタグやフィルタを自作する — Django v1.0 documentation

この種のタグを簡単に作成できるようにするため、 Django では simple_tag というヘルパー関数を提供しています。

def current_time(format_string):
    return datetime.datetime.now().strftime(format_string)

register.simple_tag(current_time)

何だ、すごく簡単だぞ。作りたかったのはflavor=novice (初心者モード)では「中央値(同点の場合は両方)」と表示してflavor=advancedなら「中央値」だけにする、と言ったようなユーザの属性によって表現を変えるタグなんだ。やることはブラウザの言語によって英語で表示したり日本語で表示したりするtransタグと似たようなことだけど、言語設定とは切り離したかった。それだけなので

def mytrans(key, flavor):
    return data[flavor][key]

register.simple_tag(mytrans)

あっさり。dataは辞書の辞書で、どっか適当なところで定義したやつをimportする。DBに置いてもいいね。


とここまでは簡単に済んだんだけど、Google App Engine + app-engine-patchの環境では説明通りの位置にテンプレートタグを置いて、きちんとtemplatetags/__init__.pyも作って、settings.pyのINSTALLED_APPSも設定してあるのにロードに失敗する。色々いじったりサーバを再起動したりしているうちに治った。もう一回失敗させようとしてもうまく行かない。サーバ再起動が正解だったのか??