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

新手上路,请多包涵

我正在尝试获取模板中所有变量和块的列表。我不想创建自己的解析器来查找变量。我尝试使用以下代码段。

 from jinja2 import Environment, PackageLoader
env = Environment(loader=PackageLoader('gummi', 'templates'))
template = env.get_template('chat.html')

template.blocks 是字典,其中键是块,如何获取块内的所有变量?

原文由 Kracekumar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

由于没有人回答这个问题,我找到了答案

from jinja2 import Environment, PackageLoader, meta
env = Environment(loader=PackageLoader('gummi', 'templates'))
template_source = env.loader.get_source(env, 'page_content.html')
parsed_content = env.parse(template_source)
meta.find_undeclared_variables(parsed_content)

这将产生未声明变量的列表,因为这不是在运行时执行的,它将产生所有变量的列表。

注意:这将生成使用 includeextends 包含的 html 文件。

原文由 Kracekumar 发布,翻译遵循 CC BY-SA 4.0 许可协议

我有同样的需求,我编写了一个名为 jinja2schema 的工具。它提供了一种从 Jinja2 模板推断类型的启发式算法,也可用于获取所有模板变量的列表,包括嵌套变量。

这是一个简短的例子:

 >>> import jinja2
>>> import jinja2schema
>>>
>>> template = '''
... {{ x }}
... {% for y in ys %}
...     {{ y.nested_field_1 }}
...     {{ y.nested_field_2 }}
... {% endfor %}
... '''
>>> variables = jinja2schema.infer(template)
>>>
>>> variables
{'x': <scalar>,
 'ys': [{'nested_field_1': <scalar>, 'nested_field_2': <scalar>}]}
>>>
>>> variables.keys()
['x', 'ys']
>>> variables['ys'].item.keys()
['nested_field_2', 'nested_field_1']

原文由 aromanovich 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题