从Jinja2模板获取变量

2024-09-30 14:29:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要使用以下函数从这个Jinja2模板中提取变量名(使用JSON):

{{ variable }}
{{ some.variable.type.json }}
{{ _("Hello") }}
<p>Some HTML file</p>

我需要得到如下输出:

{'some': {'variable': {'type': {'json': <scalar>}}}, 'variable': <scalar>}

或者这个:

["some.variable.type.json", "variable"]

我试过金甲2的环境:

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名称:

{'some', 'variable'}

我也试过Jinja2模式:

import jinja2schema

with open("test.html", mode="r") as f:
    template = str("".join(f.readlines()))
    variables = jinja2schema.infer(template)

    print(variables)

它返回我想要的没有函数的结果,但当HTML中有某个Jinja2函数时,我得到了异常:

jinja2schema.exceptions.InvalidExpression: line 3: "_" call is not supported

有没有办法在没有函数名的情况下从Jinja2模板获取完整变量? 谢谢你的帮助


Tags: 函数env模板jsonjinja2sourcehtmltype