2012-12-09 26 views
2

我在Jinja模板中编写for循环时遇到困难,该模板对包含水果名称的变量进行迭代,并且在主体中是该变量提供的变量的特性。对于Jinja2中的循环及其相关变量

因此,可以说,我们有我有困难以下变量

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

在for循环,遍历该水果变量,然后在体内只调用特定的水果正在迭代变量创建。因此,在第一次迭代中,当值为苹果时,身体必须使用变量apple_color和apple_weight,并且类似地,第二次迭代香蕉体内的变量是banana_color和banana_weight。

这是否需要使用其他名称列表?

回答

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 %}