您可以使用包装器覆盖Environment.get_template
方法,该包装器将给定的模板名称存储到列表中:
class NameTrackingEnvironment(jinja2.Environment):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.names = []
def get_template(self, name, parent=None, globals=None):
self.names.append(name)
return super().get_template(name, parent, globals)
因此,给定以下模板:
base.html个
Greetings:
{% block content %}{{ vartest }}{% endblock %}
child.html个
World
mynestedtemplate.html个
{% extends 'base.html' %}
{% block content %}{{ super() }}, {% include 'child.html' %}!{% endblock %}
以下代码:
environment = NameTrackingEnvironment(loader=jinja2.FileSystemLoader(''))
template = environment.get_template('mynestedtemplate.html')
print(template.render(vartest="Hello"))
print(environment.names)
然后输出:
Greetings:
Hello, World!
['mynestedtemplate.html', 'base.html', 'child.html']
演示:https://replit.com/@blhsing/NavyAwfulCryptocurrency