如何获取 jinja 2 模板文件中所有变量的列表
how to get list of all variables in jinja 2 template file
我有一个用例,我想在其中获取 jinja2 模板中未引用变量的列表。
我在 Whosebug 上找到了一些关于如何执行此操作的解释,但这些例子中没有一个使用文件作为模板,我非常非常困惑
这是我的代码。第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'
如下所示,因为 'bar' 未在 'data' 字典中引用。
this should print foo:foo
this should print bar:bar
set('bar')
任何解决此问题的帮助将不胜感激
首先我想澄清一下,jinja 认为变量是通过 Environment
class 的实例属性 global
赋值的变量。
global
属性是一个字典,其中包含我们将在模板中使用的变量。
import jinja2
from jinja2 import meta
env = jinja2.Environment(loader=jinja2.FileSystemLoader(searchpath="./"))
# Declare foo, but no bar
env.globals['foo'] = 'foo'
# Load the template as a file and read it
with open("testfile.txt") as file:
ast = env.parse(file.read())
# Find the undeclared variables of our template loaded with an environment that
# only has 'foo' declared in it `globals` attr.
undeclared_variables = meta.find_undeclared_variables(ast)
print(undeclared_variables)
结果:
{'bar'}
我有一个用例,我想在其中获取 jinja2 模板中未引用变量的列表。 我在 Whosebug 上找到了一些关于如何执行此操作的解释,但这些例子中没有一个使用文件作为模板,我非常非常困惑
这是我的代码。第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' 如下所示,因为 'bar' 未在 'data' 字典中引用。
this should print foo:foo
this should print bar:bar
set('bar')
任何解决此问题的帮助将不胜感激
首先我想澄清一下,jinja 认为变量是通过 Environment
class 的实例属性 global
赋值的变量。
global
属性是一个字典,其中包含我们将在模板中使用的变量。
import jinja2
from jinja2 import meta
env = jinja2.Environment(loader=jinja2.FileSystemLoader(searchpath="./"))
# Declare foo, but no bar
env.globals['foo'] = 'foo'
# Load the template as a file and read it
with open("testfile.txt") as file:
ast = env.parse(file.read())
# Find the undeclared variables of our template loaded with an environment that
# only has 'foo' declared in it `globals` attr.
undeclared_variables = meta.find_undeclared_variables(ast)
print(undeclared_variables)
结果:
{'bar'}