python 我怎样才能得到所有需要的变量和属性在一个jinja2模板呈现

fv2wmkja  于 2023-02-11  发布在  Python
关注(0)|答案(2)|浏览(203)

我正在尝试使用jinja2为自己构建一个配置生成器。在尝试呈现模板之前,我需要知道预期变量及其键是什么,以便在呈现模板之前提供一个要填充的示例文件。所需参数将根据选定的配置类型和使用的模板而更改。我不知道我不想存储所有需要的参数,因为模板会不时地更改,也会添加新的模板。每个模板将有50个左右的参数
以下是一个示例模板文件

{{data.config1[0].field1}}
{{data.config2[0].field3}}
firt level change test
{% for row in data.config1 %}
{% if row.field3=='1' %}
something {{row.field1}} {{row.field2}}
{% else %}
something {{row.field1}}
{% endif %}
{% endfor %}
footer thingy
{{data.config2[0].field5}}

我尝试使用find_undeclared_variables从jinja2.meta包这里是我的示例代码

import os
from jinja2 import Environment, FileSystemLoader,meta

template_filename = 'change.txt'
PATH = os.path.dirname(os.path.abspath(__file__))
TEMPLATE_ENVIRONMENT = Environment(
                autoescape=False,
                loader=FileSystemLoader(os.path.join(PATH)),
                trim_blocks=False)
template_source =TEMPLATE_ENVIRONMENT.loader.get_source(TEMPLATE_ENVIRONMENT,   template_filename)[0]
parsed_content = TEMPLATE_ENVIRONMENT.parse(template_source)
variables= meta.find_undeclared_variables(parsed_content)
print (variables)

这是我能得到的

{'data'}

我想要的输出是这样的。

{'config1':['field1','field2','field3'], 'config2':['field3','field5']}

请建议。

kmb7vmvb

kmb7vmvb1#

我已经使用Jinja2schema生成了预期输出。

f87krz0w

f87krz0w2#

jinja2.meta.find_undeclared_variables函数可以帮助您:
https://jinja.palletsprojects.com/en/3.1.x/api/#jinja2.meta.find_undeclared_variables

相关问题