Django templatetags カスタムフィルタの作り方

Django

(最終更新月:2022年2月)

✔このような方へ向けて書かれた記事となります

「Django templatetagsって何?」

「Django tempaltetagsをオリジナルで作りたいけどどうやるの?」

「実例があるとわかりやすいんだけど、、、」

✔当記事を通じてお伝えすること

  • Django templatetags テンプレートフィルタとは?
  • Djangoでオリジナルテンプレートフィルタの作り方
  • 実際に使ってみよう|使い方の解説

【著者プロフィール】

profile_icon
【Python歴】11年 x 【Django歴】10年
HP作成、社内システムの構築、コンサルティング

当ブログを通じて、Webアプリの書き方やアプリの公開方法までを解説しています。

☆日報アプリ「D-Repo」(デモ版)→こちら

※Djangoをベースに作成したアプリです。

☆便利ツールアプリ「Tool Station」→こちら

※Django REST frameworkとReactで作成しているアプリです。

✔月9,800円でWebデザインが学べる

デザナルは、Webデザインに苦手意識がある方におすすめのサブスク型スクールです。

特徴は以下の通り。

  • 初期費用不要
  • 教材が使い放題
  • 案件で収入も得られる

デザナルは稼ぎながら学べる、格安のWebデザインスクールです。

>>詳細はこちら<<

安いWebデザインスクール「デザナル」を徹底分析

Djangoのテンプレートタグ/テンプレートフィルタとは?

Djangoにはテンプレート上で一定の処理ができるようテンプレートタグ、テンプレートフィルタが用意されています。

当記事では、テンプレートフィルタについて詳しく解説をしていきます。テンプレートタグについて知りたい方はこちらをご覧ください。→ 「テンプレートタグ全25種類を解説

テンプレートフィルタとは、指定した値に一定の処理を加えて、その結果をブラウザで表示できるという機能のことです。

書き方としては、{{ 値 | フィルタ }} となります。

ビルトインされているの一つを例として挙げてみます。下記はアルファベットを大文字にするフィルタです。

{{ "i like python" | upper }}

ブラウザでの表示は下記の通りとなります。

ビルトインされているものもとても便利なフィルターは多いです。

ただ、どうしても備わっているものには限りがありますので、当記事を通じて、オリジナルのテンプレートフィルタを作成する方法について解説していきます。

Djangoでオリジナルテンプレートフィルタの作り方

今回作成するフィルタは下記の通りです。

値がNoneの時は空文字を返し、それ以外はそのまま値を返す

作成の背景としては、テンプレート上に記述した変数がNoneの時、通常ですとDjangoは「None」とブラウザ上に表示させます。

ただブラウザで「None」と表示されるのはとてもかっこ悪いので、何も表示されないようにします。

if文を使って表示を操作することもできますが、今回はフィルタを使い対応してみます。

もちろん、「こんなの必要ないよ!」という方も、やり方の一例としてご覧頂いてご自身のアプリに必要なものをお作り下さい。

ファイルの保存場所

ファイルの保存場所が大事です。

アプリフォルダ直下に下記の通りフォルダ、ファイルを作成します。

templatetags > __init__.py, お好きなファイル名.py

私のファイルツリーは下記のとおりです。

アプリフォルダ
├── __init__.py
├── admin.py
├── apps.py
..
..
├── templatetags #新しく作成したのはこちらです
│   ├── __init__.py
│   └── myfilter.py
..
└── views.py

今回は「myfilter.py」というファイル名になっています。

作成方法

作成したフィルタは下記の通りです。

from django import template

register = template.Library()

@register.filter
def checkNone(value):
    if not value:
        return ""
    else:
        return value

オリジナルフィルター作成の際に使用できるテンプレートはこちら↓

from django import template
register = template.Library()
@register.filter
def 関数名(value):
    #ここに処理を入れる
    return 表示させたい値

テンプレートのうち、

  1. 関数名
  2. 処理
  3. returnする値

3つを記述すれば完成です。

関数で受け取る「value」は、テンプレート上で指定する値です。

関数内で一定の処理をし、返す値をこの関数で指定しましょう。

実際に使ってみよう|使い方の解説

作成が完了しましたら、テンプレート上での作業に移ります。

フィルターの読み込み

{% load myfilter %}

注意)こちらの例ではファイル名が、「myfilter.py」の場合です。

フィルタの記述

{{ 適用したい値 | フィルタの関数名 }}

今回は「object.name」という変数にフィルタを適用したいので下記のように記述します。

{{ object.name | checkNone }}

サーバーの再起動

記述は完了しましたが、このままでは表示が何も変わりません。

サーバーを立ち上げている場合は、一度「ctrl + c」でサーバーをストップし、再度起動します。

サーバーを再起動することで、作成したフィルタが正しく読み込まれます。

まとめ

以上でオリジナルテンプレートフィルタの作成、使い方の解説を終わります。

当記事の内容を整理します。

テンプレートフィルタとは、指定した値に一定の処理を加えてその結果をブラウザに表示できる機能です。

カスタムフィルタの作り、テンプレートで適用するには下記のステップで進めましょう。

  1. 保存場所
  2. 記述方法
  3. テンプレート上での読み込み
  4. テンプレート上での記述
  5. サーバーの再起動

もし、「これなんだっけ?」というものがある方は該当の箇所に戻りもう一度見返してみて下さい。

もしくは都度、当ブログまで戻ってければと思います。

当ブログでは、日報アプリ開発を通じて、Webアプリを一から開発し公開するまでを初学者の方でもわかるようにと記事を連載しています

「Djangoでのアプリ開発を学びたい!」
「Djangoで開発したアプリをWebで公開するにはどうするの?」

という方は必見です!

【Django】チュートリアル|日報アプリの開発から公開まで
Djangoのチュートリアルをお探しですか?具体的に「手を動かして作ってみたい!」という方へ向けて、誰でもできる簡易的な日報アプリの開発を通じて、Djangoの様々な機能に触れていくシリーズとなっています。PythonでWebアプリを作りたい方、必見の記事となります!

タイトルとURLをコピーしました