Python 如何获取jinja 2模板文件中所有变量的列表

Python 如何获取jinja 2模板文件中所有变量的列表,python,jinja2,Python,Jinja2,我有一个用例,我想在jinja2模板中获得一个未引用变量的列表。 我在stackoverflow上找到了一些关于如何实现这一点的解释,但这些例子中没有一个使用文件作为模板,我非常非常困惑 这是我的密码。第8行和第9行可以省略,ofc import jinja2 from jinja2 import meta env = jinja2.Environment(loader=jinja2.FileSystemLoader(searchpath="./")) template_

我有一个用例,我想在jinja2模板中获得一个未引用变量的列表。 我在stackoverflow上找到了一些关于如何实现这一点的解释,但这些例子中没有一个使用文件作为模板,我非常非常困惑

这是我的密码。第8行和第9行可以省略,ofc

import jinja2
from jinja2 import meta


env = jinja2.Environment(loader=jinja2.FileSystemLoader(searchpath="./"))
template_file = "testfile.txt"
template = env.get_template(template_file)
data = dict(foo='foo', bar='bar')
print(template.render(data))


data = dict(foo='foo')
test = env.parse(data, template)
print(meta.find_undeclared_variables(test))
下面是“testfile.txt”的内容

this should print foo:{{foo}}
this should print bar:{{bar}}
这是我的输出

this should print foo:foo
this should print bar:bar

set()
我希望得到的输出是集合中的字符串“bar” 如下所示,因为“数据”指令中未引用“条”

this should print foo:foo
this should print bar:bar

set('bar')


如果您能帮助解决此问题,我们将不胜感激。

首先我想澄清一下,jinja认为变量是通过
环境
类的实例属性
全局
分配的变量。
global
属性是一个包含我们将在模板中使用的变量的字典

importjinja2
从jinja2导入元数据
env=jinja2.Environment(loader=jinja2.FileSystemLoader(searchpath=“./”)
#声明foo,但不声明bar
环境全局['foo']='foo'
#将模板作为文件加载并读取它
打开(“testfile.txt”)作为文件:
ast=env.parse(file.read())
#查找加载了以下环境的模板的未声明变量:
#只有'foo'在'globals'attr中声明。
未声明的变量=元。查找未声明的变量(ast)
打印(未声明的_变量)
结果:

{'bar'}

这是否回答了您的问题?你好不完全是。。该帖子不处理存储在文件中的模板。但是谢谢你的建议。嗨,卢卡斯,非常感谢你。这完全回答了我的问题!为了完整起见,我想补充一点,您可以省略加载程序,只需执行env=jinja2.Environment()