यह संभव और काफी सरल है।
Django केवल आपके फ़िल्टर के लिए एक तर्क की अनुमति देता है, लेकिन कोई कारण नहीं है कि आप उन्हें अलग करने के लिए अल्पविराम का उपयोग करके अपने सभी तर्क एक ही स्ट्रिंग में नहीं डाल सकते।
उदाहरण के लिए, यदि आप एक ऐसा फ़िल्टर चाहते हैं, जो यह जाँच करे कि क्या चर 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 बनाती है, एक जनरेटर अभिव्यक्ति है जो किसी भी अग्रणी और अनुगामी रिक्त स्थान को निकालने के लिए सभी कॉमा और कॉल .strip () पर args स्ट्रिंग को विभाजित करती है।
यदि, उदाहरण के लिए, 3 तर्क एक int है तो बस करें:
arg_list[2] = int(arg_list[2])
या अगर उनमें से सभी ints करते हैं:
arg_list = [int(arg) for arg in args.split(',')]
संपादित करें: अब विशेष रूप से पैरामीटर के रूप में कुंजी, मान जोड़े का उपयोग करके अपने प्रश्न का उत्तर दें, आप उसी श्रेणी का उपयोग कर सकते हैं जोओवरो यूआरएल के बाहर क्वेरी स्ट्रिंग को पार्स करने के लिए उपयोग करता है, जो तब आपके सेटिंग्स के अनुसार ठीक से वर्ण एन्कोडिंग को संभालने का लाभ है। ।
इसलिए, क्वेरी स्ट्रिंग के साथ, प्रत्येक पैरामीटर को 'और' द्वारा अलग किया जाता है:
{{ 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',''))