嵌套循环&简单的模板引擎

时间:2014-11-09 12:50:12

标签: python bottle python-3.4

我在STPL中使用嵌套循环时遇到问题。

以下是 template.tpl

的一部分
 % for item in result:
     <div class="form-group">
         <label for="Label">{{''.join(item)}}</label><br>
         <p>
             % for item1 in result1:
                 {{''.join(item1)}}
             % end
         </p><br>
         <input type="text" class="form-control" name="q{{''.join(item)}}">
     </div><br><br>
 % end

问题是这部分代码会从元组 result1

返回所有元素
% for item1 in result1:
    {{''.join(item1)}}
% end

结果 result1 是来自SQLite 3的数据的元组

我需要这样的东西:

...
<label>First element from tuple result</label>
<p>First element from tuple result1</p>
...
<label>Second element from tuple result</label>
<p>Second element from tuple result1</label>
...
...

有什么想法吗?:) 感谢。

1 个答案:

答案 0 :(得分:1)

使用zip构建一个2元组列表,将resultresult1中的相应项目压缩在一起:

>>> result = [1 ,2, 3]
>>> result1 = ['a', 'b', 'c']
>>> zip(result, result1)
[(1, 'a'), (2, 'b'), (3, 'c')]

您应该在视图中执行此操作,而不是在模板中执行此操作。从视图中,您只需返回一个包含2元组的新列表,我们称之为items。在模板中,您只需要一个循环,并将2元组解压缩为单独的变量:

 % for label, description in items:
     <div class="form-group">
         <label for="Label">{{''.join(label)}}</label><br>
         <p>{{''.join(description)}}</p><br>
         <input type="text" class="form-control" name="q{{''.join(label)}}">
     </div><br><br>
 % end