メニュー

【Django】HTMLにカスタムテンプレート(関数)を呼び出す方法

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 }}は、{{ <引数> | <関数名> }}