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

如何获取存在语法错误的Jinja嵌套模板的文件名及行号?

获取Jinja嵌套模板错误的文件名和行号

我太懂这个痛点了——Jinja默认抛出的TemplateError在嵌套模板场景下只会给你行号,完全不知道是哪个子模板出的问题,定位起来简直头疼。不过好在Jinja藏了个实用的属性能解决这个问题,咱们直接从错误对象里扒模板信息就行。

修复后的代码

把你的异常处理改成这样,就能同时拿到文件名和行号了:

try:
    response = render_document_template(render_arguments)
except TemplateError as error:
    line_number = error.lineno
    # 取出错的模板文件名,兼容非文件加载的模板场景
    template_filename = error.template.filename if hasattr(error, 'template') else "Unnamed template"
    error_details = f"Error in template `{template_filename}` at line {line_number}: {str(error)}"
    return Response(
        error_details,
        status=status.HTTP_500_INTERNAL_SERVER_ERROR
    )

原理说明

当Jinja渲染包含其他模板的文件时,抛出的语法错误(比如TemplateSyntaxError,它是TemplateError的子类)会携带一个template属性,这个属性指向出错的那个具体模板实例。而实例的filename属性就是该模板对应的文件路径或名称——不管是主模板还是嵌套的子模板,都能精准定位。

额外小提醒

  • 如果你的模板是直接从字符串渲染的(不是从文件加载),filename会是None,所以加个hasattr判断能避免抛出额外的属性错误。
  • 要是遇到多层嵌套的复杂错误,还可以看看error.original_error属性,它能帮你追溯更底层的错误根源,但大多数情况下error.template就足够搞定定位问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 14:32:27