Templates 删除Mako模板中的前导空格
在从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}\
\
的换行符)
下面的代码
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')]))