如何注释包含嵌套注释的Jinja2代码块?
Jinja2 处理包含嵌套注释代码块的最佳方法
Jinja2原生的{# ... #}注释语法不支持嵌套,只要解析到第一个#}就会终止当前注释,所以你例子里的内部{# Start Config #}会提前结束外层注释,导致后续代码没被正确注释。
解决这个问题有两种实用方法:
方法一:使用支持嵌套的{% comment %}标签(推荐)
Jinja2的{% comment %}和{% endcomment %}标签是专门的注释块语法,天然支持嵌套。直接用它包裹需要注释的代码块即可,内部的{# ... #}不会影响外层注释的范围:
{% comment %} {# Start Config #} something something else {{ some_var }} {% for for in bar %} {{ foo }} {% endcomment %}
这种方法最省心,不管内部有多少层级的注释,外层都能正确覆盖整个代码块,编辑器也能准确识别注释范围。
方法二:转义内部的注释标记
如果不想用{% comment %}标签,可以把内部的注释标记转义成Jinja2不会识别的形式,比如用变量输出括号:
{# {{ '{' }}# Start Config #{{ '}' }} something something else {{ some_var }} {% for for in bar %} {{ foo }} #}
这里把内部的{#换成{{ '{' }}#,#}换成#{{ '}' }},Jinja2解析时会把它们当成普通字符串处理(注释块本身不会被渲染,转义后的内容也不会显示),这样外层的{# ... #}就能完整包裹整个代码块。
内容的提问来源于stack exchange,提问作者Dave0
相关产品推荐
相关产品推荐

