对于Jinja2中的Loop以及相关变量

时间:2012-12-09 12:31:54

标签: python for-loop jinja2

我很难在Jinja模板中编写for循环,该模板迭代包含水果名称的变量,而在正文中也是该水果的特征,也是作为变量提供的。

所以我们假设我们有以下变量

fruit=apple,banana,grapes
apple_color=red
apple_weight=1kg
banana_color=yellow
banana_weight=2kg
grapes_color=green
grapes_weight=3kg

我很难创建一个迭代fruit变量的for循环,然后在body中调用仅特定于正在迭代的fruit的变量。所以在第一次迭代中,当值为apple时,body必须使用变量apple_color和apple_weight,类似地,对于第二次迭代,body中的变量是banana_color和banana_weight。

这是否需要将列表用于其他内容?

1 个答案:

答案 0 :(得分:1)

在您的代码中:

fruits = {'apple' : {'color', apple_color, 'weight' : apple_weight}, 'banana' : {'color' : banana_color, 'weight' : banana_weight}, 'grapes' : {'color' : grapes_color, 'weight' : grapes_weigh}} 

or if you use your already defined variables like  : apple_color = 'red'

fruit_names = ['apple', 'banana', 'grapes']
fruits = {}
for each in fruit_names :
    fruits[each] = {}
    fruits[each]['color'] = globals()['%s_%s' %(each, 'color')]
    fruits[each]['weight'] = globals()['%s_%s' %(each, 'weight')]

在你的模板中:

{% for each in fruits %}
    {{ fruits[each].color }}
    {{ fruits[each].weight }}
{% endfor %}

or :

{% for key, value in fruits.items() %} 
    {{ key }}
    {{ value.color }} 
    {{ value.weight }} 
{% endfor %}