가능하고 상당히 간단합니다.
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를 생성하는 행은 모든 쉼표에서 args 문자열을 분할하고 .strip ()을 호출하여 선행 및 후행 공백을 제거하는 생성기 표현식입니다.
예를 들어 세 번째 인수가 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',''))