Django 템플릿의 사용자 지정 템플릿 필터에 여러 인수를 추가 설치하고 있습니까?
내 사용자 지정 필터는 다음과 가변적입니다.
from django import template
register = template.Library()
@register.filter
def replace(value, cherche, remplacement):
return value.replace(cherche, remplacement)
시도한 방법은 다음과 오류가 있습니다.
{{ attr.name|replace:"_"," " }}
{{ attr.name|replace:"_" " " }}
{{ attr.name|replace:"_":" " }}
{{ attr.name|replace:"cherche='_', remplacement=' '" }}
나는 django의 문서 와 책을 많이 받은 단일 인수를 사용하는 예제 만 찾았습니다 ... 가능합니다?
가능하고 상당히 간단합니다.
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',''))
문서 의이 섹션 에 따르면 불가능합니다 .
사용자 지정 필터는 하나 또는 두 개의 인수를 사용하는 Python 함수입니다.
- 변수 값 (입력)-반드시 문자열 일 필요는 없습니다.
- 인수의 값-기본값을 갖거나 모두 생략 할 수 있습니다.
이렇게 쉽습니다.
@register.filter(name='one_more')
def one_more(_1, _2):
return _1, _2
def your_filter(_1_2, _3)
_1, _2 = _1_2
print "now you have three arguments, enjoy"
{{ _1|one_more:_2|your_filter:_3 }}
필터 대신 태그를 간단한 태그로 등록하십시오. 그것들은 여러 인수를 취할 수 있습니다. 그것을 호출하는 구문은 약간 다를 것이지만 그것은 단지 구문적인 설탕 변경 일뿐입니다.
이 기능은 2013 Django의 Trac에서 WONTFIX로 표시되었습니다 : http://code.djangoproject.com/ticket/1199
<내 사이트> /globaltags/replace.py
from django.template import Library
import re
register = Library()
def search(value, search):
return re.sub(search, '#f4x@SgXXmS', value)
def replace(value, replace):
return re.sub('#f4x@SgXXmS', replace, value)
register.filter(search)
register.filter(replace)
템플릿에서 :
{{ "saniel"|search:"s"|replace:"d" }}
다음과 같이 간단히 할 수 있습니다.
{% assign find_total_issued = dailysalesreport | find: "TotalIssued":"13" %}
public static List<object> Find(object collection, string column, string value)
그리고 함수의 추상화가이므로 목적지에 도달 할 것입니다 sjare
.
여기에 나쁜 생각이 있지만 작동합니다.
{{ xml|input_by_xpath:"{'type':'radio','xpath':'//result/value'}" }}
과
@register.filter
def input_by_xpath(device, args):
args = eval(args)
...
result = "<input type=\"%s\" value=\"%s\" name=\"%s\"/>"%(args['type'],value,args['xpath'])
return mark_safe(result)
'ProgramingTip' 카테고리의 다른 글
AngularJS에서 인라인 템플릿 사용 (0) | 2020.10.05 |
---|---|
왜 git은 "최적의 성능을 위해 백그라운드에서 저장소 자동 포장"이라고 계속 말하고 있습니까? (0) | 2020.10.05 |
Graphviz, 가장자리 크기 변경 (0) | 2020.10.05 |
Scala에서 여러 값을 패턴 화하는 방법은 무엇입니까? (0) | 2020.10.05 |
Objective-C에서 #define 대 const (0) | 2020.10.05 |