এটি সম্ভব এবং মোটামুটি সহজ।
জ্যাঙ্গো কেবলমাত্র আপনার ফিল্টারে একটি যুক্তিকে মঞ্জুরি দেয়, তবে কোনও কারণ নেই যে আপনি আপনার সমস্ত যুক্তিগুলিকে আলাদা করতে কমা ব্যবহার করে একটি স্ট্রিংয়ে রাখতে পারবেন না।
সুতরাং উদাহরণস্বরূপ, আপনি যদি এমন একটি ফিল্টার চান যা ভেরিয়েবল এক্স তালিকায় রয়েছে কিনা তা পরীক্ষা করে [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)
লাইনটি আরগ_লিস্ট তৈরি করে এমন একটি জেনারেটর এক্সপ্রেশন যা আর্গুমেন্ট স্ট্রিংটি সমস্ত কমাতে বিভক্ত করে এবং যে কোনও নেতৃস্থানীয় এবং অনুসরণযোগ্য স্থানগুলি সরাতে .strip () কল করে।
যদি, উদাহরণস্বরূপ, 3 য় আর্গুমেন্ট একটি অন্তর্গত হয় তবে ঠিক করুন:
arg_list[2] = int(arg_list[2])
বা যদি তাদের সমস্তগুলি অন্তর্নিহিত হয়:
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',''))