如何将Mako模板中的多行换行符转换为单个换行符?

3 投票
2 回答
1626 浏览
提问于 2025-04-17 23:16

我正在用 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)

撰写回答