Djangoでテンプレートの組み込みテンプレートフィルターを作成する
Djangoには、テンプレート内で値を修正する機能がある。これを、組み込みのテンプレートフィルターと言う。
例えば、テンプレート内で、{{ 'text'|upper }}とすると画面上でTEXTと大文字で表示される。
このupperが大文字にするタグフィルターである。
以下のように記述する。
- テンプレート(index.html)
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>INDEX</title>
</head>
<body>
<h1>Welcome</h1>
<h2>Hello World</h2>
<h1>{{ 'hello'|upper }}</h1> <!-- タグフィルターの利用 -->
</body>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>INDEX</title>
</head>
<body>
<h1>Welcome</h1>
<h2>Hello World</h2>
<h1>{{ 'hello'|upper }}</h1> <!-- タグフィルターの利用 -->
</body>
他の組み込みタグには、公式ドキュメント参考
また、独自に組み込みテンプレートフィルターを定義することもできる。
テンプレートフィルターを自作する
組み込みタグの定義には、以下のようにする。
- アプリケーションのフォルダ内に、templatetagsというフォルダを作成する
- templatetagsフォルダ内に__init__.pyを作成する
- フィルターを定義するファイルを作成して関数を記述し、templateライブラリーのregisterで登録する
- 上記のファイルをテンプレート上で、load関数を用いてインポートして用いる
- アプリケーションフォルダ内にtemplatetagsフォルダと__init__.pyを作成する(__init__.pyには何も記述しなくてよい)
- extra_tag.py(テンプレートフィルターを自作するファイル)を作成して関数を登録する
# extra_tag.py
from django import template
from django import template
register = template.Library() # 組み込みタグを登録用のオブジェクト
@register.filter(name='cut_filter') # 関数を登録する
def cut_filter(value, arg): # 関数を作成する。argは組み込み関数の引数
return value.replace(arg, '') # 文字列valueからargを削除して返す
- templates/basicapp/index.html
<!DOCTYPE html>
<html lang="ja">
<head>
{% load extra_tag %} <!-- 作成したextra_tag.pyが読み込まれる -->
<meta charset="UTF-8">
<title>INDEX</title>
</head>
<body>
<h1>Welcome</h1>
<h2>Hello World</h2>
<h1>{{ 'Hello World'|cut_filter:'Hello' }}</h1>
<!-- extra_tag.pyのcut_filter関数にcut_filter('Hello World', 'Hello')として呼び出し、返されたreturnの値が表示される -->
<html lang="ja">
<head>
{% load extra_tag %} <!-- 作成したextra_tag.pyが読み込まれる -->
<meta charset="UTF-8">
<title>INDEX</title>
</head>
<body>
<h1>Welcome</h1>
<h2>Hello World</h2>
<h1>{{ 'Hello World'|cut_filter:'Hello' }}</h1>
<!-- extra_tag.pyのcut_filter関数にcut_filter('Hello World', 'Hello')として呼び出し、返されたreturnの値が表示される -->
- 表示結果(3番目のHello Worldがcut_filter:'Hello'の結果Worldだけになる)
詳細はこちらのドキュメント参照