如何将mako模板中的多个换行符转换为一个换行符?

时间:2014-03-21 11:54:53

标签: python mako

我正在使用mako template python并尝试使用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 newlines。任何人都可以帮我这个。我也无法在其文档中找到解决方案:(

2 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,看起来像是用于Windows的Mako模板中的错误。提供模板作为字符串而不是文件引用(如下所示)解决了问题。

with open('code.template') as f:
    templateStr = f.read()
template = mako.template.Template(templateStr)

答案 1 :(得分:1)

旧话题,但是我发现使用预处理器kwarg可以找到一种更好的方法:

tpl_lookup = TemplateLookup(directories=['./templates'], output_encoding='utf-8', module_directory='./tmp', preprocessor=[lambda x: x.replace("\r\n", "\n")])