Django フレームワークでテンプレートフィルタをカスタマイズする
2022-01-03 05:46:30
カスタムフィルタは、1つまたは2つの引数を持つPython関数です。
- (入力)変数の値
- パラメータの値。デフォルトまたは完全に空白の状態
例えば、フィルター {{ var|foo: "bar" }} では、フィルター foo には変数 var とデフォルトのパラメーター bar が渡されます。
フィルタ関数は常に戻り値を持つべきである。また、例外は発生させず、すべて静かに失敗するようにしなければなりません。エラーが発生した場合は、生の入力か空文字列を返すべきで、その方が理にかなっている。
以下に、フィルタを定義する例を示します。
def cut(value, arg):
"Removes all values of arg from the given string"
return value.replace(arg, '')
以下は、変数値からスペースを除去するためのフィルタの例です。
{{ somevariable|cut:" " }}
ほとんどのフィルターは、引数を必要としません。次の例では、関数から引数を取り出しています。
def lower(value): # Only one argument.
"Converts a string into all lowercase"
return value.lower()
フィルタを定義したら、それを Django のテンプレート言語である
register.filter('cut', cut)
register.filter('lower', lower)
library.filter()メソッドは、2つの引数を取ります。
- フィルタの名前(文字列)
- フィルタ機能そのもの
Python 2.4 以降を使用している場合は、デコレータ register.filter() を使用することができます。
@register.filter(name='cut')
def cut(value, arg):
return value.replace(arg, '')
@register.filter
def lower(value):
return value.lower()
2 番目の例のように name 引数を省きたい場合、Django は関数名をフィルタの名前として扱います。
以下は、フルテンプレートライブラリにカットフィルタを適用した例です。
from django import template
register = template.Library()
@register.filter(name='cut')
def cut(value, arg):
return value.replace(arg, '')
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン