2017-01-23 7 views
2

Я обнаружил, что шаблоны Jinja2 имеют свойство .blocks, которое обеспечивает доступ к именованным блокам. Однако он не предоставляет данные комментариев (понятно).Как я могу прочитать блоки комментариев из шаблона Jinja2?

Есть ли программный или надежный способ получить комментарий от шаблона Jinja2? (В идеале я избегаю писать регулярное выражение, поскольку я предполагаю, что синтаксический анализ встроен ... Я просто не нашел его).

Вот пример:

Учитывая этот шаблон Jinja2:

{# 
Comment block content. 
#} 

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

... Я хотел бы иметь возможность получить следующее:

Комментарий содержимое блока ,


Есть ли Bulit-в, возможно, недокументированные способ получить при этом содержание надежно?

ответ

0

Я просмотрел исходный код jinja и другие статьи, и, похоже, нет возможности собирать комментарии jinja2 изначально. Ответ Per Martijin Петра на 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']