【问题标题】:How to avoid repetitive filter specification in mako %def's?如何避免在 mako %def 中重复过滤器规范?
【发布时间】:2015-10-03 02:44:46
【问题描述】:

我发现自己对我的 mako 代码中的所有 %def 重复相同的过滤器属性:

<%def name="mydef1(a,b)" filter="trim">
# something something something
</%def>

... 

<%def name="mydef2(b)" filter="trim">
# something something something
</%def>

有没有办法为所有 %def 指定一组默认过滤器并避免我的代码中重复的“filter="trim"'?

我注意到有 an option to specify default filters for expression filters,但我找不到 %def 的类似内容。

【问题讨论】:

  • 有一个名为buffer_filters 的选项,它可以为%def 指定默认过滤器。但是它只适用于%def 定义的buffered="True"。我认为最好的解决方案是在Mako's repository 中提出问题并要求添加此功能。或者你总是可以修改 DefTag 类以添加过滤器到每个 %def >。

标签: python template-engine mako


【解决方案1】:

您可以使用几种解决方法:

  1. 如果你没问题,你可以使用default_filters 参数 importing the defs programmaticallyloading them from a file
  2. 您可以在父定义中nest the defs,并应用 过滤到父 def(我当前的机器上没有 mako,所以我不能发短信,但我 99% 确定这可行,如果我错了,请叫我。)

    <%def name="filterdefs()" filter="trim">
    
        <%def name="mydef1(a,b)">
        # something something something
        </%def>
    
        <%def name="mydef2(b)">
        # something something something
        </%def>
    
    </def>
    
  3. 最后,您可以使用buffer_filters,如 厘米。但是,您可以不添加 buffered="True"capture(myDef)而不是myDef()调用def

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-23
    • 2017-03-11
    • 2017-09-16
    • 1970-01-01
    • 2019-10-24
    • 1970-01-01
    • 2014-09-01
    • 1970-01-01
    相关资源
    最近更新 更多