我有一个像这样的Jinja 2模板:
foo{# comment #}
bar
启用trim_blocks
后,模板呈现为:
foobar
我希望模板呈现如下:
foo
bar
我尝试使用+#}
语法在评论后禁用修剪,但它没有用。我怎样才能做到这一点?我不想在模板中的每个评论后添加额外的换行符。
编辑:我无法控制呈现模板的代码,因此任何解决方案都必须位于模板本身内。
答案 0 :(得分:1)
您可以更改评论块的lexing规则
import re
from jinja2 import Environment
from jinja2.lexer import TOKEN_COMMENT, TOKEN_COMMENT_BEGIN, TOKEN_COMMENT_END, Failure
env = Environment()
env.trim_blocks = True
c = lambda x: re.compile(x, re.M | re.S)
e = re.escape
comment_block_suffix_re = ''
env.lexer.rules[TOKEN_COMMENT_BEGIN] = [
(c(r'(.*?)((?:\-%s\s*|%s)%s)' % (
e(env.comment_end_string),
e(env.comment_end_string),
comment_block_suffix_re
)), (TOKEN_COMMENT, TOKEN_COMMENT_END), '#pop'),
(c('(.)'), (Failure('Missing end of comment tag'),), None)
]
有关详细信息,请参阅词法分析器模块的source code
答案 1 :(得分:1)
只需在评论后使用{{ "\n" }}
输出换行符:
foo{# comment about foo #}{{ "\n" }}
bar
理想情况下,您可以更改渲染代码以不删除评论,但如果您不能,则会保留所需的输出。