如何避免在mako%def中重复过滤规范?

zr.*_*zr. 13 python template-engine mako

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

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

... 

<%def name="mydef2(b)" filter="trim">
# something something something
</%def>
Run Code Online (Sandbox Code Playgroud)

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

我注意到有一个选项可以为表达式过滤器指定默认过滤器,但我找不到类似于%def的东西.

Par*_*ker 2

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

  1. default_filters如果您可以以 编程方式导入defs从文件加载它们,则可以使用该参数。
  2. 您可以将 def 嵌套在父 def 中,并将过滤应用于父 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>
    
    Run Code Online (Sandbox Code Playgroud)
  3. 最后,您可以buffer_filters按照评论中的建议使用。但是,除了添加之外,buffered="True"您还可以调用defwithcapture(myDef)而不是myDef()