如何从Jinja2模板中读取注释块?

时间:2017-01-23 23:14:00

标签: python jinja2

我发现Jinja2模板具有.blocks属性,可以访问命名块。但是,它不提供评论数据(可以理解)。

是否有程序化或可靠的方式从Jinja2模板中检索评论内容? (理想情况下,我正在避免编写正则表达式,因为我认为解析是内置的...我只是没有找到它)。

以下是一个例子:

鉴于这个Jinja2模板:

{#
Comment block content.
#}

{% block main %}
This is the main block. We don't really care about it.
{% endblock %}

...我希望能够检索以下内容:

  

评论栏内容。

是否有可靠的,无证的方式可靠地获取此内容?

1 个答案:

答案 0 :(得分:0)

我浏览了jinja的源代码和其他文章,似乎没有办法本机收集jinja2评论。 Per Martijin Peter对Jinja2 Inline Comments的回答,{# #}语法可以用作内联注释,但它们主要用于禁用模板的一部分

  

回答

     

{#..#}仅用于禁用模板的一部分

     

<强>注释

     

...是的,{#...#}用于评论,包括评论(禁用)模板的一部分

作为一种解决方法,您可以使用正则表达式(您声明不希望使用它),也可以切换到标准HTML注释并使用BeautifulSoup。使用BeautifulSoup确实支持轻松收集评论

template = '''<!--
Comment block content.
-->

{% block main %}
This is the main block. We don't really care about it.
{% endblock %}'''

from bs4 import BeautifulSoup, Comment
soup = BeautifulSoup(template, 'html.parser')
comments = soup.findAll(text=lambda text: isinstance(text, Comment))
print(comments)

>>>['\nComment block content.\n']