呈现期间的Jinja2依赖关系

时间:2017-08-14 22:13:50

标签: jinja2 html-rendering dependency-graph

我正在尝试从模板的渲染中构建一个依赖图,我在尝试从jinja中获取好的信息时遇到了一些麻烦。

我希望能够渲染模板并获取用于渲染模板的所有文件的列表/集合。例如:

# template.html
{% extend base.html %}
{% for partial in partials %}
    {% include partial %}
{% endfor %}

让它渲染并找出使用的文件。

# deps.py
base_path = os.path.dirname(os.path.realpath(__file__))
jinja_env = jinja2.Environment(
    loader=jinja2.FileSystemLoader(base_path))

template = jinja_env.get_template('template.html')
template.render({
    "partials": [
        "test1.html",
        "test2.html",
    ],
})
# ???
looking_for = ['base.html', 'test1.html', 'test2.html']

我已经检查了AST树和meta.find_referenced_templates(ast),但它只适用于包含路径的常量字符串。

尝试查看令牌的自定义扩展,但是我遇到了相同的问题,我可以看到变量名称,但无法获取变量的值,因为它是在解析/编译阶段完成的。

还尝试覆盖{% include %},但不确定如何正确执行此操作。

通过使用自定义加载器,我可以获取值,但前提是它们在环境缓存加载的模板之前尚未加载。 (如果我禁用缓存,此解决方案可能会起作用,但它会对渲染产生显着的性能影响。)

如何跟踪用于单个模板渲染的所有扩展/包含依赖项?

0 个答案:

没有答案