(最終更新月:2021年12月)
「テンプレートフィルタってなに??」
「HTMLテンプレート文をできるだけ短くしたい!なにか方法は?」
というDjango初学者の方へ向けての記事となります
当記事を通じて、
- テンプレートフィルタを独自に作成する方法
を解説していきます
テンプレートフィルタとは、
{{ object_list|length }}
などと「|(パイプ)」を使い、HTMLテンプレートの変数に何かしらの処理を行い、表示をする機能のことを指します
引数を取ることも可能です
{{ テンプレート内変数|フィルタ:”引数” }}
当記事の構成としては、
- 独自のテンプレートフィルタの作り方
- 実例
の2部構成となっています
早速見ていきましょう!
当記事はアプリ開発~公開までをご紹介しているシリーズの一記事になります
最終的には、下記リンク先のような日報アプリを開発、公開できるように進めていきます
興味のある方は下記よりシリーズをまとめたページへお進みください

テンプレートフィルタの作り方
テンプレートフィルタの作り方を順を追ってみてきます
①フォルダ・ファイルの作成について
- appフォルダ内に「templatetags」フォルダを作成
- 「templatetags」内に__init__.pyの作成(コードの記述は不要)
- 同列にpyファイルを作成(名前はお好きなもので構いません)
【フォルダツリー】
accounts #appフォルダ
├── __init__.py
├── ....
├── templatetags #以下、新しく作成
│ ├── __init__.py
│ └── accounts_user.py
└── views.py
②作成したpyファイルに関数を記述
必ずこちらから始めよう
from django import template
register = template.Library()
関数は下記のように記述します
@register.filter
def 関数名(value):
#処理
return 表示したい値
引数「value」はテンプレート上で、{{ value|フィルタ }}としたときのvalueです
③フィルタの読み込み・適用
テンプレート上で、
{% load ファイル名 %}
{{ 値|フィルタ名 }}
とします

必ず「{% load%}タグ」でファイルを読み込んでから記述するのを忘れずに!
④サーバーのリスタート
最後に一度サーバーをリスタートして完了です

「ctrl + C」でサーバーをストップ
再度、「python manage.py runserver」でスタートしよう!
さて、次章より実例をご紹介します
まずは今回作成するフィルタで何をしたいのかをカンタンにご説明します
【実例】作成したフィルタの主旨
ナビゲーションバーに「ユーザー名」もしくは「ゲスト」と表示されるようにしていきます
普通に、{{ request.user }}だけだと、

ログインしていない時に「AnonymousUser」と表示されてしまいます
この時に「ゲスト」と表示されるようなフィルタを作っていきます
【実例】コード
【accounts > templatetags > accounts_user】
from django import template
register = template.Library()
@register.filter
def user_display(user):
user_display = "ゲスト"
if user.is_authenticated:
user_display = user.email
return user_display
【templates > nav.html】
....
{% load accounts_user %}
<a class="nav-link dropdown-toggle ....>
{{ request.user|user_display}}
</a>
....
サーバーをリスタートしてアクセスしてみると

無事、意図したとおりに表示がされました!
まとめ
独自のフィルタを作成し、適用させるには、
- templatetags > __init__.pyと使用するpyファイルの作成
- ルールに基づいたフィルタの記述
- テンプレート上で読み込み・使用
- サーバーのリスタート
という流れが必要です
また、記述のルールについては一度で覚えるのも大変です
当記事の書き方やサンプルコードを見に、いつでも戻ってきてください
当ブログでは、日報アプリ開発を通じて、Webアプリを一から開発し公開するまでを初学者の方でもわかるようにと記事を連載しています
「Djangoでのアプリ開発を学びたい!」
「Djangoで開発したアプリをWebで公開するにはどうするの?」
という方は必見です!
