Получить переменные из шаблона Jinja2 - PullRequest
0 голосов
/ 06 мая 2020

Мне нужно извлечь имена переменных (с 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 без имен функций? Спасибо за помощь

...