How to track state when iterating in Python's Mako Templates
I want to loop over a list and print the elements seperated by ',', with no trailing comma. I can't just ', '.join(headings)
because of the formating and escaping. But the following obviously leaves me with a trailing comma.
% for x in headings:
<a href='#${x|u}'>${x}</a>, \
% endfor
Or more generally: When iterating over something in a Mako template, is there a way to know if I reached the last element (or开发者_C百科 first, or nt)?
I do stuff like this:
<%def name="format( item )"><a href="#${item|u}">${item|u}</a>
</%def>
${', '.join( format(item) for item in l)}
To keep track of the first or last leg through the loop, in Mako like in plain Python, use:
% for i, x in enumerate(headings):
so i
is 0 on the first leg and len(headings) - 1
on the last leg.
Extending on @AlexMartelli's answer, I like to couple the enumerate
thing with a nice trick to keep the instruction small:
% for i, x in enumerate(xs):
${','*bool(i)} ${x}
% endfor
精彩评论