渲染以换行符 (\n) 结尾的文件时,我希望渲染的输出也会以换行符结尾。 用尾随换行符结束文本文件是类 UNIX 系统的标准约定。
最后的换行符从渲染输出中剥离。
>>> c
u'foo is {{ foo }}\nquux is {{ quux }}\nasdf\n'
>>> t = jinja2.Template(c)
>>> t.render(foo="bar", quux="baz")
u'foo is bar\nquux is baz\nasdf'
>>> s = t.stream()
>>> s.next()
u'foo is \nquux is \nasdf'
>>> s.next()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/ifreeman/.local/lib/python2.7/site-packages/jinja2/environment.py", line 1271, in __next__
return self._next()
StopIteration
>>>
将keep_trailing_newline=True
传递给Environment
: http :
好的,感谢您的回复,我不知道这是一个选项,但似乎这应该是默认设置。 假设用户想要以与模板语言无关的意外方式修改输入似乎很奇怪。 事实上,我什至打开这个问题的原因是因为我使用 shinto-cli (https://github.com/istrategylabs/shinto-cli) 来参数化构建作业中的一些文件,我注意到它正在输出没有换行符的文件,所以当我附加到它们时,我在一行上压扁了几行。 起初我打算用 shinto-cli 打开一个问题,直到我浏览了源代码,然后我自己尝试了 python REPL 中的基本 jinja2 模板,并意识到这只是 jinja2 的默认行为。
我可以用 shinto-cli 打开一个问题,要求他们将 keep_trailing_newline=True 选项添加到他们所有的 Environment 调用中。
最有用的评论
好的,感谢您的回复,我不知道这是一个选项,但似乎这应该是默认设置。 假设用户想要以与模板语言无关的意外方式修改输入似乎很奇怪。 事实上,我什至打开这个问题的原因是因为我使用 shinto-cli (https://github.com/istrategylabs/shinto-cli) 来参数化构建作业中的一些文件,我注意到它正在输出没有换行符的文件,所以当我附加到它们时,我在一行上压扁了几行。 起初我打算用 shinto-cli 打开一个问题,直到我浏览了源代码,然后我自己尝试了 python REPL 中的基本 jinja2 模板,并意识到这只是 jinja2 的默认行为。
我可以用 shinto-cli 打开一个问题,要求他们将 keep_trailing_newline=True 选项添加到他们所有的 Environment 调用中。