如何在Python的Mako模板中迭代时跟踪状态
我想遍历一个列表,把里面的元素用逗号隔开打印出来,而且最后一个元素后面不能有逗号。我不能直接用 ', '.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)}