如何在Python的Mako模板中迭代时跟踪状态

4 投票
3 回答
2546 浏览
提问于 2025-04-15 18:40

我想遍历一个列表,把里面的元素用逗号隔开打印出来,而且最后一个元素后面不能有逗号。我不能直接用 ', '.join(headings),因为这样会影响格式和转义。但是这样做明显会在最后留下一个逗号。

% for x in headings:
  <a href='#${x|u}'>${x}</a>, \
% endfor

或者更一般来说:在Mako模板中遍历某个东西时,有没有办法知道我是否到达了最后一个元素(或者第一个,或者其他的)?

3 个回答

3

在@AlexMartelli的回答基础上,我想分享一个小技巧,把enumerate这个东西和它结合起来,这样可以让代码看起来更简洁:

% for i, x in enumerate(xs):
  ${','*bool(i)} ${x}
% endfor
4

为了在循环中记录第一次或最后一次的情况,在Mako和普通Python中可以这样做:

% for i, x in enumerate(headings): 

所以当i是0的时候表示第一次循环,而len(headings) - 1则表示最后一次循环。

4

我会这样做:

<%def name="format( item )"><a href="#${item|u}">${item|u}</a>
</%def>

${', '.join( format(item) for item in l)}

撰写回答