You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用自定义加载器时如何查看Jinja2顶级模板代码?

如何在Jinja2中打印动态生成的顶级模板代码

Jinja2的模板实例自带source属性,可直接获取模板的原始代码,你可以在捕获渲染异常时通过这个属性打印顶级模板内容,具体实现如下:

方法1:在异常处理中直接访问模板实例的source属性

from jinja2 import Environment, BaseLoader

class CustomLoader(BaseLoader):
    def get_source(self, environment, template_name):
        # 这里是你动态生成模板代码的逻辑
        dynamic_source = "{% for item in items %}{{ item }}{% endfor %}"
        return dynamic_source, template_name, lambda: False

# 初始化环境与模板
env = Environment(loader=CustomLoader())
top_template = env.get_template("placeholder_name")

try:
    # 尝试渲染模板
    rendered_result = top_template.render(items=[1, 2, 3])
except Exception as e:
    # 打印顶级模板代码
    print("=== 顶级模板代码 ===")
    print(top_template.source)
    # 打印错误详情
    print(f"\n=== 渲染错误 ===")
    print(str(e))

方法2:提前保存模板代码(避免异常中无法访问模板实例的情况)

如果你的业务逻辑中,异常处理块无法直接获取到模板实例,可以在渲染前先保存模板代码:

top_template = env.get_template("placeholder_name")
# 提前缓存顶级模板代码
template_source = top_template.source

try:
    rendered_result = top_template.render()
except Exception as e:
    print("=== 顶级模板代码 ===")
    print(template_source)
    print(f"\n=== 渲染错误 ===")
    print(str(e))

注意事项

  • template.source返回的就是你自定义加载器中get_source方法返回的顶级模板内容,完全匹配动态生成的代码。
  • 如果模板存在嵌套引用(比如使用{% include %}或{% extends %}),template.source仅返回当前顶级模板的代码,嵌套模板的代码需要通过对应的子模板实例访问。

内容的提问来源于stack exchange,提问作者mnieber

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 00:50:22