Django テンプレートタグ・フィルターを実装する

シェアする

Django テンプレートタグ・フィルターを実装します。

Django には、たくさんの強力なテンプレートタグ・フィルターが存在しますが、自分で実装することも可能です。

テンプレートタグ・フィルターが実装できると、コード量が多くなりがちな views.py を軽くすることができるので大変便利です。

例えば、ユーザーエージェントを見て、iPhone か Android かを判断するフィルターが欲しいとします。まずはリファレンスを探します。リファレンスを探しても無いようなので(そりゃそうだ)、今回実装してみたいと思います。

完成イメージ

バージョン

  • Python 3.6.4
  • Django 2.0.3

インストール

Python, Django

Python と Django のインストールは、Python Web フレームワーク Django の環境を構築するの記事を参考にしてください。

実装

tree

ファイル構成は上記のようになります。

テンプレートタグ・フィルターは、startapp で作成したアプリケーションディレクトリ下に、templatetags ディレクトリを作成し、そこに実装します。app_extras.py というファイルがそれです。

views.py が存在しないところが、今回のポイントです。

settings.py

settings.py は、いつも通りに実装します。

app_extras.py

テンプレートフィルターを実装します。と言っても、特に難しいところはなく、デコレーターで、Django に自作した関数を登録するだけです。
@register.filter デコレーターを使っています。

index.html

実装したテンプレートフィルターを使うには、まず、実装したテンプレートフィルターモジュールをロードします。あとは、Django のフィルターと同様に使用するだけです。

urls.py

動作確認

runserver を起動

動作確認するため、runserver を起動します。

ユーザーエージェント iPhone でアクセス

ユーザーエージェントは、Chrome の拡張機能を使って、iPhone にしています。

ユーザーエージェント Android でアクセス

Chrome で普通にアクセス

まとめ

Django のテンプレートフィルターを実装しました。テンプレートタグの実装についても、Django に登録するデコレータの関数が違うだけで、同様に実装することができます。

今回は、urls.py でテンプレートを指定していますので、views.py にコードを一行も書かずにユーザーエージェント判別を実装することできました。

テンプレートフィルター・タグは便利ですが、views.py や models.py などを import したりすると、コードがスパゲッティになってしまうので、やり過ぎには注意しましょう。

シェアする

フォローする