2013-06-16 4 views
0

저는 Jinja를 처음 접하고 그것이 필요한 것을 할 수 있을지 평가하려고 노력하고 있습니다.Jinja로 템플릿 블록 재귀

각 요소에 키/값 쌍 사전이 포함 된 요소 목록이 있다고 가정 해보십시오. Jinja가 목록의 각 요소에 대해 블록을 반복하고 블록 내용을 사용하여 각 사전의 키/값 쌍을 인쇄합니다.

(실제 구현은 재귀를 사용하기 때문에 반복문을 말합니다. 반복과 마찬가지로 개념이 같기 때문에 여기서는 간단히 사용합니다).

block.html :

{% extends base.html %} 
{% block element %} 
    <do some fancy printing with the current dictionary here> 
{% endblock %} 

base.html :

{% for item in seq %} 
    <li>{% block element %}{% endblock %}</li> 
{% endfor %} 

그래서,이에 나의 순진 시도 (이 다소 의사입니다)이 같은 것

.py 파일 (GoogleAppEngine Jinja 구현을 기반으로 함) :

myDict = { 'seq': [{'keyA0': 'valueA0', 'keyA1': 'valueA1'}, 
        {'keyB0': 'valueB0', 'keyB1': 'valueB1'}] } 


template = JINJA_ENVIRONMENT.get_template('block.html') 
self.response.write(template.render(myDict)) 

나는 이것을 원하는 방식으로 구성하는 방법을 잘 모르겠습니다.

Entry0: 
keyA0: valueA0 
keyA1: valueA1 

Entry1: 
keyB0: valueB0 
keyB1: valueB1 

하지만 각각은 필요한 데이터를 차단 전달하는 방법을 잘 모르겠어요 : 나는 블록의 '인스턴스'과 같은 출력 뭔가, 값을 인쇄하려면 목록에서 해당 사전을 갖고 싶어. 이게 진자와 가능한가?

답변

2

코드가 괜찮습니다. 블록 요소 목록을 만들었습니다. 모든 블록에 대해 블록 dict을 반복합니다. "Entry0 :"

예 (마크 업없이) :

Entry{{ loop.index }}: 
{% for key, value in item.iteritems() %} 
    {{ key }} : {{ value }} 
{% endfor %} 
당신은 같은 항목을 렌더링하기 위해 신사의 loop.index을 사용할 수 있습니다