Djangoカスタムテンプレートフィルタ
4496 ワード
Djangoカスタムテンプレートフィルタ(register.filter)
djangoのテンプレート言語には独自のフィルタがありますが、これらの独自のフィルタが足りないと感じる場合があります.Pythonを使用してカスタムタグとフィルタを定義することで、テンプレートエンジンを拡張し、タグを使用してテンプレートに提供することができます.
コードレイアウトまずappパッケージの下にtemplatetagsパッケージ(init.py) を作成する必要があります.その後、このパッケージでカスタムタグ/フィルタフォルダを作成できます(モジュールファイルの名前は、後でタグをロードするために使用する名前ですので、他のアプリケーションのカスタムタグやフィルタと競合しない名前を慎重に選択してください).例えば:mytag.py カスタムフィルタメソッドを書き終わったら、テンプレートにこのファイル あなたのフィルターを書くまずtemplateをインポートする必要があります(テンプレートフォルダではなくdjangoが持っているtemplateモジュールに注意してください).ここでは カスタムフィルタは、1~2つのパラメータを持つPythonの関数 です.
1>(入力された)変数の値は、文字列タイプ2>とは限りません.パラメータの値は、デフォルト値を持つか、フィルタを書くなど、除外できます.
テンプレートhtmlでは、
注意:この場合、自分で作成したフィルタはテンプレートで有効になりません.マークする必要があります.
さっきのregisterが役に立ちます
バックグラウンドから送られてくる変数が文字列ではなく整数であることを心配する場合(整数はAttributeErrorを引き起こすため)、装飾器stringfilterを使用します.
後ろにregisterがあります.simple_tag
djangoのテンプレート言語には独自のフィルタがありますが、これらの独自のフィルタが足りないと感じる場合があります.Pythonを使用してカスタムタグとフィルタを定義することで、テンプレートエンジンを拡張し、タグを使用してテンプレートに提供することができます.
コードレイアウト
{% load mytag.py %}
をインポートします(これは、テンプレートを変更してmytag.pyをロードすることを意味します)template.Library
のインスタンスを登録して、フィルタを有効にする必要があります.mytagで.py上部入力:from django import template
register = template.Library()
1>(入力された)変数の値は、文字列タイプ2>とは限りません.パラメータの値は、デフォルト値を持つか、フィルタを書くなど、除外できます.
def cut(value, arg):
"""
value arg ''
"""
return value.replace(arg, '')
テンプレートhtmlでは、
{{ somevariable|cut:"0" }} # cut '0'
注意:この場合、自分で作成したフィルタはテンプレートで有効になりません.マークする必要があります.
さっきのregisterが役に立ちます
@register.filter(name='cut')
# name , ,Django 。
def cut(value, arg):
return value.replace(arg, '')
バックグラウンドから送られてくる変数が文字列ではなく整数であることを心配する場合(整数はAttributeErrorを引き起こすため)、装飾器stringfilterを使用します.
from django import template
from django.template.defaultfilters import stringfilter
register = template.Library()
@register.filter
@stringfilter #
def cut(value, arg):
return value.replace(arg, '')
後ろにregisterがあります.simple_tag