それは可能で、かなり簡単です。
Djangoでは、フィルターに対して1つの引数しか許可されていませんが、コンマを使用してすべての引数を1つの文字列にまとめることができない理由はありません。
したがって、たとえば、変数Xがリスト[1,2,3,4]にあるかどうかをチェックするフィルターが必要な場合は、次のようなテンプレートフィルターが必要になります。
{% if X|is_in:"1,2,3,4" %}
これで、次のようなテンプレートタグを作成できます。
from django.template import Library
register = Library()
def is_in(var, args):
if args is None:
return False
arg_list = [arg.strip() for arg in args.split(',')]
return var in arg_list
register.filter(is_in)
arg_listを作成する行は、すべてのコンマでargs文字列を分割し、.strip()を呼び出して先頭と末尾のスペースを削除するジェネレータ式です。
たとえば、3番目の引数がintの場合は、次のようにします。
arg_list[2] = int(arg_list[2])
または、それらすべてがintである場合は、次のようにします。
arg_list = [int(arg) for arg in args.split(',')]
編集:キーと値のペアをパラメーターとして使用して質問に具体的に答えるために、DjangoがURLからクエリ文字列を解析するために使用するのと同じクラスを使用できます。これには、settings.pyに従って文字エンコードを適切に処理するという利点もあります。 。
したがって、クエリ文字列と同様に、各パラメータは「&」で区切られます。
{{ attr.name|replace:"cherche=_&remplacement= " }}
次に、置換関数は次のようになります。
from django import template
from django.http import QueryDict
register = template.Library()
@register.filter
def replace(value, args):
qs = QueryDict(args)
if qs.has_key('cherche') and qs.has_key('remplacement'):
return value.replace(qs['cherche'], qs['remplacement'])
else:
return value
誤った置換を行うリスクを冒して、これをスピードアップすることができます。
qs = QueryDict(args)
return value.replace(qs.get('cherche',''), qs.get('remplacement',''))