2010-08-12 7 views
0

동시에 두 차원의 템플릿에서 반복을 시도하는 데 문제가있었습니다.으시시 사용자 정의 템플릿 필터?

기본 상황은 여기에 설명 :

http://www.djangobook.com/en/2.0/chapter04/합니다 (사과, 바나나 지수 예)

>>> from django.template import Template, Context 
>>> t = Template('Item 2 is {{ items.2 }}.') 
>>> c = Context({'items': ['apples', 'bananas', 'carrots']}) 
>>> t.render(c) 
u'Item 2 is carrots.' 

내가 변수 "fruitstep"이에 3 1에서 반복하고 싶었 , 템플릿에서이 작업을 수행 할 수 없습니다.

{{items.fruitstep}}이 (가) 실패하고 긴 도트 체인을 고려하면이 개념은 템플릿에 대규모 반복 요구 사항을 초래합니다. 하지만 표준 방법을 찾지 못했고 좋은 템플릿 연습이 아닌 것 같습니다.

@register.filter 
def key2value(collection,key): 
    try: 
     return collection[unicode(key)] # It seems that my collection 
             # keys are in unicode... 
    except: 
     return "" 

이것은 매우 강력한 필터처럼 보인다 :

그래서, 템플릿 필터를 만들었습니다. 그것은 매우 구체적인 태그가되기 시작했지만 완전히 일반화하지 않을 이유를 생각할 수 없었습니다.

표준 방법이 있고 휠을 다시 발명했는지, 또는이 코드가 시스템을 손상시킬 수있는 것이 있는지 궁금합니다.

감사합니다.

+0

안전 문제는 반환 된 모든 것이 HTML 안전하다는 것을 확인하는 것과 관련이 있다는 것을 알고 있습니다. 기본값을 변경하지 않으면 반환 된 정보를 이스케이프 처리하지만 컬렉션의 항목이 안전하다는 것을 확인하는 것은 불가능합니다. – iJames

답변

0

아니요, 자신의 응용 프로그램에서이 작업을 수행하지 않아도됩니다. 나는 종종 비슷한 필터를 만들었고 실제로 다양한 질문에 대한 답변으로 비슷한 코드를 게시했습니다.

사전 조회를 제공하면 시스템이 손상 될 수 있다고 상상하기가 어렵습니다. 이 기능은 Django에서 기본적으로 제공되지 않습니다. 제한된 템플릿 언어를 원했기 때문입니다.이 특정 필터가 처음부터 제공 되었어야했는지는 논쟁의 여지가 있지만, 실제로는 추가되지 않을 것입니다. 지금.

+0

감사합니다! 나는 안심할 수있어서 기쁩니다. 사용자 정의 필터에 대한 섹션을 읽을 때 문자열을 HTML에 안전하게 적용하는 것이 명확한 것처럼 보입니다. 이것이 프로그래머의 재량에 따라 어떻게 될지 알 수 없기 때문에 이것이 불가능 해 보입니다. 그럼에도 불구하고, 나는 도트 그룹을 구분하기위한 다른 구분자를 생각하고있었습니다. 태그 렌더러에 도트 문자열을 여러 점으로 나누어 추가하는 기능을 추가 할 수 있습니다. thispoll.thechoices..forloop.counter 또는 thispoll.thechoices..myselectlist..forloop.counter 오, 이미 모호한. 음, 다시 일하러 가자. – iJames

관련 문제