2010-01-30 2 views
3

Я хочу перебрать список и распечатать элементы, разделенные символом ',', без конечной запятой. Я не могу просто ', '.join(headings) из-за формирования и экранирования. Но следующее, очевидно, оставляет меня с конечной запятой.Как отслеживать состояние при итерации в шаблонах Mako Python

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

Или в более общем плане: Когда итерация что-то в шаблоне Мако, есть способ узнать, если я достиг последнего элемента (или первый, или нт)?

ответ

4

я делать такие вещи, как это:

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

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

Любая идея, как вызывать встроенные форматы, такие как HTML спасаясь ('| u' и т. д.) от ваших собственных функций? – Brutus

+0

@Brutus Он должен работать так же, как и в любом другом шаблоне mako. –

4

Чтобы следить за первую или последнюю ногу через петлю, в Мако как в простом Python, используйте:

% for i, x in enumerate(headings): 

так i- на первом этапе и len(headings) - 1 на последней ноге.

2

Расширение на @ ответ AlexMartelli, я хотел соедини enumerate вещь с хорошей трюк, чтобы сохранить команду маленький:

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

Упрощение для использования правдивости. – mattmc3

 Смежные вопросы

  • Нет связанных вопросов^_^