【问题标题】:How to disable Jinja2 whitespace trimming after comment?评论后如何禁用 Jinja2 空白修剪?
【发布时间】:2015-12-29 21:06:56
【问题描述】:

我有一个这样的 Jinja 2 模板:

foo{# comment #}
bar

启用trim_blocks 时,模板呈现为:

foobar

我希望模板呈现如下:

foo
bar

我尝试使用+#} 语法在注释后禁用修剪,但它不起作用。我怎样才能做到这一点?我不想在模板中的每条评论之后都添加额外的换行符。

编辑:我无法控制呈现模板的代码,因此任何解决方案都必须在模板本身内。

【问题讨论】:

    标签: whitespace jinja2 template-engine


    【解决方案1】:

    只需在注释后使用{{ "\n" }} 输出换行符:

    foo{# comment about foo #}{{ "\n" }}
    bar
    

    理想情况下,您可以将渲染代码更改为不剥离 cmets,但如果您不能这样做,这将保留所需的输出

    【讨论】:

      【解决方案2】:

      您可以更改评论块的词法规则

      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

      【讨论】:

        猜你喜欢
        • 2010-11-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-13
        • 2018-08-26
        • 2017-03-16
        • 1970-01-01
        • 2012-08-07
        相关资源
        最近更新 更多