将 mako 渲染模板写入文件时创建的附加回车

Posted

技术标签:

【中文标题】将 mako 渲染模板写入文件时创建的附加回车【英文标题】:Additional carriage return created when writing mako rendered template to a file 【发布时间】:2021-01-07 10:07:30 【问题描述】:

我正在使用 mako 模板库生成一个 test.txt 文件,但是生成的文件在每行之间包含额外的空行。

我发现了一个关于这个问题的类似问题here 并且提出的解决方案建议使用标记安全,但我不相信这也适合我的情况,因为它考虑将文本格式化为参数在渲染模板时,这不是我想做的(我不想更改模板中的大部分文本,我只是输入了一些变量)。

我认为还值得一提的是,如果我在 Python 中打印渲染的模板,它会以正确的格式打印;额外的行只出现在我使用 Python 的文件 write() 将模板数据写入 (test.txt) 的文件中。

【问题讨论】:

【参考方案1】:

支持this answer,解决方案是打开文件进行写入二进制而不是只写入。然后,您需要将字符串转换为字节并将其写入文件。以下对我有用(tl; dr最后两行):

templates = TemplateLookup(directories=[input_dir,], module_directory=mako_module_dir)

try:
    rendered_output = templates.get_template(target_template).render_unicode(**data)
except:
    print(mako_exceptions.text_error_template().render())
    return
with open(f'output_diros.path.sepos.path.basename(output_filename)', 'wb') as outfile:
    outfile.write(rendered_output.encode())

【讨论】:

以上是关于将 mako 渲染模板写入文件时创建的附加回车的主要内容,如果未能解决你的问题,请参考以下文章

Mako

如何将数组传递给 mako 模板?

在JavaScript中写入文件时将每个字符串附加到新行[重复]

怎么在pe系统把img文件写入u盘

如果文件不存在,则创建它并将字符串写入其中。如果确实如此,则将字符串附加到它。工作不正常

获取“[Vue 警告]:无法安装组件:未定义模板或渲染函数。”尝试在没有 .vue 的情况下导入时