views.pyやapps.pyと同階層のところに「templatetags」を作成する。どうもこれはDjangoで決まっているディレクトリ名とのこと。
そのディレクトリ名の中には空の「__init__.py」ファイルを入れとく。ざっくり言うと「ここにモジュールがあるよ」という意味。
とりあえず適当にhogetaro.pyというファイルを作る。
from django import template
register = template.Library()
@register.filter
def hogehoge(str):
return str
一番上の「from django import template」はtemplatetagsで必要なおまじないコード。
下の「register = template.Library()」も同じく。これがないとHTML側で関数を呼ぼうとしてもライブラリに入ってないからとエラーが出る。
「@register.filter」以外にもデコレーターがあるようで「@register.simple_tag」とか。前者はカスタムテンプレートフィルター、後者はカスタムテンプレートタグ。
カスタムテンプレートタグの方が難しい処理をできるとのこと。
カスタムテンプレートのhogetaro.pyをtemplate/index.htmlに読み込ませるには以下のように。
<div>
{% load hogetaro %}
{{ 'おなかがへった' | hogehoge }}
</div>
{% load <pyファイル名> %}でカスタムテンプレートを呼び出せる。
{{ ‘おなかがへった’ | hogehoge }}は、{{ <引数> | <関数名> }}