Я пытаюсь получить список всех переменных и блоков в шаблоне. Я не хочу создавать свой собственный парсер для поиска переменных. Я пробовал использовать следующий фрагмент.
from jinja2 import Environment, PackageLoader
env = Environment(loader=PackageLoader('gummi', 'templates'))
template = env.get_template('chat.html')
template.blocks
- это dict, где ключами являются блоки, как я могу получить все переменные внутри блоков?
См. Документация Jinja2 Meta API для получения более подробной информации
.У меня была такая же потребность, и я написал инструмент под названием jinja2schema . Он предоставляет эвристический алгоритм для вывода типов из шаблонов Jinja2, а также может использоваться для получения списка всех переменных шаблона, включая вложенные.
Вот короткий пример этого:
>>> import jinja2
>>> import jinja2schema
>>>
>>> template = '''
... {{ x }}
... {% for y in ys %}
... {{ y.nested_field_1 }}
... {{ y.nested_field_2 }}
... {% endfor %}
... '''
>>> variables = jinja2schema.infer(template)
>>>
>>> variables
{'x': <scalar>,
'ys': [{'nested_field_1': <scalar>, 'nested_field_2': <scalar>}]}
>>>
>>> variables.keys()
['x', 'ys']
>>> variables['ys'].item.keys()
['nested_field_2', 'nested_field_1']