Jinja2内联注释

122

我该如何在Jinja2参数列表声明中添加注释?

我尝试的所有方法都会出现错误:jinja2.exceptions.TemplateSyntaxError: unexpected char u'#'

{{ Switch('var',
    [('1', 'foo'),    #  comment 1
     ('2', 'bar'),    ## comment 2
     ('3', 'rum'),    {# comment 3 #}
     ]) }}


{% macro Switch(var, caselist) %}
    {% for case, action in caselist%}
        CMP  {{var}} {{case}} 
        JNE  {{LABEL}}
        {{action}}
        JMP  {{LABELF}}
{{LABEL}}:  NOP
    {%- endfor %}
{{LABELF}}: NOP
{%- endmacro -%}
在我的情况下,Jinja2被用作汇编器的宏预处理器。

当你正在生成汇编代码时,你的问题似乎并不与此相关。你可以生成HTML或C++,这并不会改变你的问题。 - Ross Ridge
有用的链接:https://jinja.palletsprojects.com/en/2.11.x/templates/ - Gabriel Staples
4个回答

215

Jinja2不支持在{{ ... }}语句内部添加注释。你只能在这样的语句之外使用注释,并且只能使用{# .. #}或者 ## comment来添加注释。

  • {# .. #}仅用于禁用模板的一部分或在其他Jinja2语法之外添加注释。你无法嵌套使用它们。
  • # statement等同于{% statement %},如果启用并配置行语句
  • ## comment仅在启用了行语句时有效,此时它被视为注释。

通常,在Jinja语句之外,使用目标语言中的注释;例如,在生成XML时使用<!-- comment -->等。


2
我的情况下,外部注释看起来不太好看 :( - kimstik
5
"{# .. #}" 只是用于禁用模板的一部分,并且不适用于当前的文档,其中它也被用作 "{# 注释 #}"。 - timss
5
那句话应该在这个问题的背景下阅读,其中原始问题在一个区块内使用了 {# comment 3 #}。是的, {# ... #} 被用于注释,包括注释掉(禁用)模板的一部分。 - Martijn Pieters
1
如果使用<!-- comment -->,则它将在Web浏览器中解析。 Chrome-> Sources; Firefox-> Debugger。如果注释被描述得很好,则可能不安全。 https://dev59.com/bEAEtIcB2Jgan1znW93s - Alexred
@Alexred:是的,这就是为什么它们在Jinja语句之外的原因。它们是输出的一部分,可以是任何(文本)格式。 - Martijn Pieters

26
抱歉,但此语句已被弃用!
现在Jinja2有一个注释语句:
{% comment %}

    <html code/>
    {% some other statements %}
    {{ some.values }}

{% endcomment %}

@kimstik,抱歉我不明白你的问题。但我已经编辑了我的答案,请查看。 - Dan Netoff
我喜欢你的方法。保持好奇心和动力。深入探索一下。 - kimstik
6
由于某些原因,我仍然没有{% comment %},但我用了{% if False %}代替,我猜想这应该是相同的意思。 - Oren
2
jinja2.exceptions.TemplateSyntaxError: 遇到未知标签 'comment'。 - Ahmed
使用Ansible时,我遇到了AnsibleError错误:模板错误...未知标签comment。 - old-monk
显示剩余2条评论

11
我尝试在Martijn Pieters上添加注释。 {% .. %} = {# .. #} {{ .. }} = {# .. #} (与上面相同)

0
{#
comment with text and disable JINJA Execution
#}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接