如何将Mako模板中的多行换行符转换为单个换行符?
我正在用 mako 模板
和 python
,试图通过一个列表生成一个文本文件。下面的代码片段出现了问题。
% for COMPNAME in tpdob.scalar_modi:
${COMPNAME[0]} ${COMPNAME[1]} ${COMPNAME[2]} ${COMPNAME[3]}
% endfor
我用的这段代码输出效果很糟糕。
这里我有很多列表在 scalar_modi
中,我是一个一个打印出来的(每个列表有4个值)。但是问题是,输出中出现了太多的换行,导致生成的文本文件看起来很乱。
我在网上搜索过,但找不到合适的解决办法。
能帮我一下吗?
关于输出的评论:
使用 ${COMPNAME[0]} ${COMPNAME[1]} ${COMPNAME[2]} ${COMPNAME[3]}
时,我得到的是:
1 42 gzb dli
14 23 tpty sre
32 55 puri ald
而使用 ${COMPNAME[0]} ${COMPNAME[1]} ${COMPNAME[2]} ${COMPNAME[3]} \
,得到的是:
11 42 gzb dli14 23 tpty sre32 55 puri ald
我想要的格式是:
11 42 gzb dli
14 23 tpty sre
32 55 puri ald
而当我使用 if-else
条件时,输出的换行甚至超过了两个。有没有人能帮我解决这个问题。我在文档里也找不到解决方案 :(
2 个回答
2
这个话题虽然老旧,但我刚发现了一种更好的方法,可以使用预处理器的kwarg参数:
tpl_lookup = TemplateLookup(directories=['./templates'], output_encoding='utf-8', module_directory='./tmp', preprocessor=[lambda x: x.replace("\r\n", "\n")])
4
我也遇到过同样的问题,这看起来是Windows上Mako模板的一个错误。把模板作为字符串提供,而不是用文件的方式(如下所示),就解决了这个问题。
with open('code.template') as f:
templateStr = f.read()
template = mako.template.Template(templateStr)