Мне нужно извлечь имена переменных (с JSON) из этого шаблона Jinja2 с функциями:
{{ variable }}
{{ some.variable.type.json }}
{{ _("Hello") }}
<p>Some HTML file</p>
Мне нужно получить что-то вроде этого:
{'some': {'variable': {'type': {'json': <scalar>}}}, 'variable': <scalar>}
Или это:
["some.variable.type.json", "variable"]
Я пробовал Environment from jinja2:
from jinja2 import Environment, FileSystemLoader, meta
env = Environment(loader=FileSystemLoader(""))
template_source = env.loader.get_source(env, "test.html")[0]
parsed_content = env.parse(template_source)
variables = meta.find_undeclared_variables(parsed_content)
print(variables)
Но он возвращает имена функций на выходе и не возвращает все JSON name:
{'some', 'variable'}
Я тоже пробовал jinja2schema:
import jinja2schema
with open("test.html", mode="r") as f:
template = str("".join(f.readlines()))
variables = jinja2schema.infer(template)
print(variables)
Он возвращает то, что я хочу, без функций, но когда в HTML есть какая-то функция Jinja2, то я получил Exception:
jinja2schema.exceptions.InvalidExpression: line 3: "_" call is not supported
Есть ли способ получить полные переменные из шаблона Jinja2 без имен функций? Спасибо за помощь