Templates 删除Mako模板中的前导空格

Templates 删除Mako模板中的前导空格,templates,whitespace,mako,removing-whitespace,Templates,Whitespace,Mako,Removing Whitespace,在从Mako模板自动生成代码的用例中,我希望有一个好的语法来删除前导空格(类似于删除行尾带有\的换行符) 下面的代码 from mako.template import Template # 1) Bad print(Template(r''' void myfunction(\ %for arg_name, arg_type in arguments: ${', ' if loop.index else ''}${arg_type} ${arg_name}\

在从Mako模板自动生成代码的用例中,我希望有一个好的语法来删除前导空格(类似于删除行尾带有
\
的换行符)

下面的代码

from mako.template import Template

# 1) Bad
print(Template(r'''
    void myfunction(\
    %for arg_name, arg_type in arguments:
        ${', ' if loop.index else ''}${arg_type} ${arg_name}\
    %endfor
    )
''').render(arguments=[('string', 'a'), ('int', 'b')]))

# 2) Good but ugly
print(Template(r'''
    void myfunction(\
    %for arg_name, arg_type in arguments:
<%    %>${', ' if loop.index else ''}${arg_type} ${arg_name}\
    %endfor
<%%>)
''').render(arguments=[('string', 'a'), ('int', 'b')]))

我想要后一种输出——那么,在保持Mako模板良好缩进的同时,是否有更好的语法?我用一个空的
来解决这个问题并不是很漂亮。

这个问题中有很多主观的词,比如beauty and nice,nicer。但我会试试看。让我知道这些是否适合你

请注意,以下两个选项都按您的要求执行,但选项1可能是最容易阅读的,但它也会删除
无效
之前的所有空白,这可能不是您想要的。选项2应该适用于您所描述的内容

使用下面的选项#2,您可以替换您最喜欢的任何字符,以表示以下所有空白都应删除

import re

# 1) Better?
print(Template(r'''
    void myfunction(\
    %for arg_name, arg_type in arguments:
        ${', ' if loop.index else ''}${arg_type} ${arg_name}\
    %endfor
    )
'''.replace('  ', '')).render(arguments=[('string', 'a'), ('int', 'b')]))

# 2) More Better?
print(Template(re.sub(r'>\s*', '', r'''
    void myfunction(\
    %for arg_name, arg_type in arguments:
>       ${', ' if loop.index else ''}${arg_type} ${arg_name}\
    %endfor
>   )
''')).render(arguments=[('string', 'a'), ('int', 'b')]))
import re

# 1) Better?
print(Template(r'''
    void myfunction(\
    %for arg_name, arg_type in arguments:
        ${', ' if loop.index else ''}${arg_type} ${arg_name}\
    %endfor
    )
'''.replace('  ', '')).render(arguments=[('string', 'a'), ('int', 'b')]))

# 2) More Better?
print(Template(re.sub(r'>\s*', '', r'''
    void myfunction(\
    %for arg_name, arg_type in arguments:
>       ${', ' if loop.index else ''}${arg_type} ${arg_name}\
    %endfor
>   )
''')).render(arguments=[('string', 'a'), ('int', 'b')]))