【问题标题】:How to track state when iterating in Python's Mako Templates如何在 Python Mako 模板中进行迭代时跟踪状态
【发布时间】:2011-01-11 06:17:19
【问题描述】:

我想遍历一个列表并打印以“,”分隔的元素,并且不带逗号。由于格式化和转义,我不能只是', '.join(headings)。但以下显然给我留下了一个逗号。

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

或者更一般地说:当迭代 Mako 模板中的某些内容时,有没有办法知道我是否到达了最后一个元素(或第一个元素,或 nt)?

【问题讨论】:

    标签: python templates mako


    【解决方案1】:

    我做这样的事情:

    <%def name="format( item )"><a href="#${item|u}">${item|u}</a>
    </%def>
    
    ${', '.join( format(item) for item in l)}
    

    【讨论】:

    • 您知道如何从您自己的函数中调用内置格式,例如 HTML 转义(|u 等)吗?
    【解决方案2】:

    要跟踪循环中的第一段或最后一段,在 Mako 中就像在普通 Python 中一样,使用:

    % for i, x in enumerate(headings): 
    

    所以i 在第一站为 0,len(headings) - 1 在最后一站。

    【讨论】:

      【解决方案3】:

      扩展@AlexMartelli 的回答,我喜欢将enumerate 与一个很好的技巧结合起来,以保持指令小:

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

      【讨论】:

        猜你喜欢
        • 2016-12-31
        • 2010-11-27
        • 2016-12-23
        • 2022-10-15
        • 2020-08-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多