有什么方法可以从 jinja2 模板字符串中获取变量键?

Rya*_*hou 2 python jinja2

这是我初始化 jinja2 模板的代码片段

from jinja2 import Template

templ = Template("{{foo}} to {{bar}}")
Run Code Online (Sandbox Code Playgroud)

我愿意从模板 obj 中提取模板字符串变量键,如下所示。

templ.keys() == ["foo", "bar"]
Run Code Online (Sandbox Code Playgroud)

是否有任何 API 可以使其工作?我已经搜索了很长时间,但没有任何工作。

hir*_*ist 5

使用jinja2.meta你可以:

from jinja2 import Environment, meta

templ_str = "{{foo}} to {{bar}}"
env = Environment()
ast = env.parse(templ_str)
print(meta.find_undeclared_variables(ast))  # {'bar', 'foo'}
Run Code Online (Sandbox Code Playgroud)

它返回set未声明变量的 。


您还可以使用regex 模块在模板字符串中查找变量名称:

from jinja2 import Template
import re

rgx = re.compile('{{(?P<name>[^{}]+)}}')
templ_str = "{{foo}} to {{bar}}"
templ = Template(templ_str)

variable_names = {match.group('name') for match in rgx.finditer(templ_str)}
print(variable_names)  # {'foo', 'bar'}
Run Code Online (Sandbox Code Playgroud)

正则表达式(可能更好......)匹配{{后跟任何不是大括号的东西,直到}}遇到。