Django テンプレートタグ・フィルターを実装します。
Django には、たくさんの強力なテンプレートタグ・フィルターが存在しますが、自分で実装することも可能です。
テンプレートタグ・フィルターが実装できると、コード量が多くなりがちな views.py を軽くすることができるので大変便利です。
例えば、ユーザーエージェントを見て、iPhone か Android かを判断するフィルターが欲しいとします。まずはリファレンスを探します。リファレンスを探しても無いようなので(そりゃそうだ)、今回実装してみたいと思います。
Contents
完成イメージ
バージョン
- 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 したりすると、コードがスパゲッティになってしまうので、やり過ぎには注意しましょう。