実行環境
python=3.8.2
Django=2.2.5
PC = Mac(catalina)
フォルダ作成
ここではアプリ名が__'myapp'__であると仮定します。
まずアプリ内にtemplatetags
フォルダを作り、
その中に__init__.pyと任意のカスタムフィルタファイル(ここではcalc.py)を作る。
ただし、__init__.pyには何も書かなくて大丈夫です。
myapp/
__init__.py
models.py
templatetags/
__init__.py
calc.py
views.py
テンプレートフィルタ作成
次にいcalc.pyにテンプレートフィルタを作っていきます。
テンプレートフィルタでは1つか2つの引数を受け取ることができます。
今回は与えられた数を2倍にするという簡単なテンプレートフィルタを作成します。
calc.py
from django import template
register = template.Library()
@register.filter
def multiply(value1):
return value1 * 2
setting.pyの変更
setting.pyの変更も行っていきます。
次のようにsettings.pyを変更してください。
settings,py
INSTALLED_APPS = [
・・・
'myapp',
'myapp.templatetags.calc', {% <- ここを追加 %}
]
settings,py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [TEMPLATE_DIR, ],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
'libraries': {
'markdown': 'myapp.templatetags.calc', {% <- ここを追加 %}
}
},
},
]
テンプレートファイルでカスタムフィルタを適用
最後に、templateファイルに{% load ファイル名 %}
を追加することで、
カスタムテンプレートフィルタを使えるようになります。
{% load calc %}
<!-- num1=3のとき、HTML上には6が表示される -->
<span>掛け算:{{ num1 | multiply }}</span>
参考
- https://teratail.com/questions/185606
- https://stackoverflow.com/questions/40686201/django-1-10-1-my-templatetag-is-not-a-registered-tag-library-must-be-one-of/42881074
- https://qiita.com/Thort/items/88ed3150339090ef0c98
- https://djangobrothers.com/blogs/custom_template_tags_filters/
- https://qiita.com/ragnar1904/items/1c87d31178f178088a94#%E6%A6%82%E8%A6%81
- https://docs.djangoproject.com/en/3.0/howto/custom-template-tags/