Mümkün ve oldukça basit.
Django, filtreniz için yalnızca bir argümana izin verir, ancak tüm argümanlarınızı virgül kullanarak ayırmak için tek bir dizeye koyamamanız için hiçbir neden yoktur.
Örneğin, X değişkeninin listede [1,2,3,4] olup olmadığını kontrol eden bir filtre istiyorsanız, şuna benzer bir şablon filtresi isteyeceksiniz:
{% if X|is_in:"1,2,3,4" %}
Şimdi şablon etiketinizi şu şekilde oluşturabiliriz:
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'i oluşturan satır, args dizesini tüm virgüllere bölen ve baştaki ve sondaki boşlukları kaldırmak için.
Örneğin, 3. argüman bir int ise, sadece şunu yapın:
arg_list[2] = int(arg_list[2])
Ya da hepsi ints ise:
arg_list = [int(arg) for arg in args.split(',')]
DÜZENLEME: şimdi, anahtar, değer çiftlerini parametre olarak kullanarak sorunuzu özel olarak yanıtlamak için, Django'nun URL'lerden sorgu dizelerini ayrıştırmak için kullandığı sınıfı kullanabilirsiniz; bu, daha sonra ayarlarınıza göre karakter kodlamasını düzgün bir şekilde işleme avantajına da sahiptir.py .
Dolayısıyla, sorgu dizelerinde olduğu gibi, her parametre "&" ile ayrılır:
{{ attr.name|replace:"cherche=_&remplacement= " }}
Daha sonra değiştirme işleviniz şimdi şöyle görünecektir:
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
Bazı yanlış değişiklikler yapma riskiyle bunu biraz hızlandırabilirsiniz:
qs = QueryDict(args)
return value.replace(qs.get('cherche',''), qs.get('remplacement',''))