与Jinja的模板块递归

时间:2013-06-16 09:36:35

标签: google-app-engine templates jinja2

我是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

但我不确定如何将每个块传递给它所需的数据。这可能与Jinja有关吗?

1 个答案:

答案 0 :(得分:2)

您的代码对我来说没问题。您已创建块元素列表。对于每个块,您遍历块dict。您可以使用jinja loop.index来呈现“Entry0:”

之类的条目

示例(没有标记):

Entry{{ loop.index }}:
{% for key, value in item.iteritems() %}
     {{ key }} : {{ value }}
{% endfor %}