如何在评论后禁用 Jinja2 空格修剪?
How to disable Jinja2 whitespace trimming after comment?
我有一个像这样的 Jinja 2 模板:
foo{# comment #}
bar
启用 trim_blocks
时,模板呈现为:
foobar
我希望模板呈现如下:
foo
bar
我尝试使用 +#}
语法来禁用评论后的修剪,但它没有用。我怎样才能做到这一点?我不想在我的模板中的每条评论后都添加额外的换行符。
编辑:我无法控制呈现模板的代码,因此任何解决方案都必须在模板本身内。
您可以更改评论块的词法规则
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
在注释后使用{{ "\n" }}
简单地输出一个换行符:
foo{# comment about foo #}{{ "\n" }}
bar
理想情况下,您可以将渲染代码更改为不去除注释,但如果不能,这将保留所需的 输出。
我有一个像这样的 Jinja 2 模板:
foo{# comment #}
bar
启用 trim_blocks
时,模板呈现为:
foobar
我希望模板呈现如下:
foo
bar
我尝试使用 +#}
语法来禁用评论后的修剪,但它没有用。我怎样才能做到这一点?我不想在我的模板中的每条评论后都添加额外的换行符。
编辑:我无法控制呈现模板的代码,因此任何解决方案都必须在模板本身内。
您可以更改评论块的词法规则
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
在注释后使用{{ "\n" }}
简单地输出一个换行符:
foo{# comment about foo #}{{ "\n" }}
bar
理想情况下,您可以将渲染代码更改为不去除注释,但如果不能,这将保留所需的 输出。