我有一个JJIA2模板,它使用了includeextends语句的其他模板.我想检索一份模板构建过程中涉及的所有模板的列表.

import jinja2
environment = jinja2.Environment()
template = environment.get_template("mynestedtemplate.html")
template.render(vartest="Hello")

我只看到一个列出块的函数:

jinja2Template.blocks 

有没有办法列出所用的模板?

推荐答案

您可以使用包装器覆盖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

Python相关问答推荐

多处理代码在while循环中不工作

我在使用fill_between()将最大和最小带应用到我的图表中时遇到问题

韦尔福德方差与Numpy方差不同

如何使用matplotlib在Python中使用规范化数据和原始t测试值创建组合热图?

对于一个给定的数字,找出一个整数的最小和最大可能的和

Excel图表-使用openpyxl更改水平轴与Y轴相交的位置(Python)

在Mac上安装ipython

为什么以这种方式调用pd.ExcelWriter会创建无效的文件格式或扩展名?

如何在Polars中从列表中的所有 struct 中 Select 字段?

迭代嵌套字典的值

转换为浮点,pandas字符串列,混合千和十进制分隔符

无法连接到Keycloat服务器

将pandas导出到CSV数据,但在此之前,将日期按最小到最大排序

搜索按钮不工作,Python tkinter

polars:有效的方法来应用函数过滤列的字符串

比Pandas 更好的 Select

Beautifulsoup:遍历一个列表,从a到z,并解析数据,以便将其存储在pdf中.

在我融化极点数据帧之后,我如何在不添加索引的情况下将其旋转回其原始形式?

python的文件. truncate()意外地没有截断'

如果列包含空值,则PANAS查询不起作用