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

如何在Jinja模板中调试所有变量?实现类PHP var_dump的调试函数

实现Jinja2中类似PHP var_dump的调试函数

要在自定义的Dump方法里获取所有模板变量,核心是拿到Jinja2的模板上下文(Context),下面是两种实用的实现方式:

方法1:使用contextfunction装饰器(推荐)

Jinja2内置的contextfunction装饰器可以让函数自动接收当前模板上下文作为第一个参数,无需在模板调用时额外传参:

from jinja2 import contextfunction

@contextfunction
def Dump(context) -> str:
    res = []
    # context是包含所有模板变量的字典对象
    for var_name, var_value in context.items():
        # 过滤Jinja2内置的特殊变量(名称以_开头)
        if not var_name.startswith('_'):
            res.append(f"<strong>{var_name}</strong>: {repr(var_value)}")
    return '<br>'.join(res)

# 将函数注册为模板全局函数
Tpl = Env.get_template(Route, globals={'Dump': Dump})
Tpl.render({'var1': 'hello', 'var2': 'world'})

模板中直接调用即可:

{{ Dump() }}

方法2:手动传递上下文变量

如果不想用装饰器,也可以在渲染时把上下文变量传入模板,再在调用函数时传递:

def Dump(context) -> str:
    res = []
    for var_name, var_value in context.items():
        if not var_name.startswith('_'):
            res.append(f"<strong>{var_name}</strong>: {repr(var_value)}")
    return '<br>'.join(res)

# 渲染时将上下文作为变量传入模板
render_vars = {'var1': 'hello', 'var2': 'world'}
Tpl.render({**render_vars, 'context': render_vars})

模板中调用方式:

{{ Dump(context) }}

额外说明

  • 上下文会包含Jinja2的内置特殊变量(如loop、_jinja2_template),通过过滤_开头的变量可以只展示用户自定义的变量。
  • 使用repr(var_value)可以获取变量的类型+值的详细表示,更贴近PHPvar_dump的调试效果。
  • 若需要更友好的可视化,可将输出格式化为HTML列表或带样式的容器,方便调试查看。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 12:28:11