Jinja2渲染HTML模板时document_number变量输出为空如何修复
问题原因
变量渲染为空是传参方式错误导致的:
你调用template.render(json_data=data_to_render)时,是把整个数据字典作为json_data这一个变量传入模板,模板顶层作用域里并没有直接名为document_number的变量,Jinja2默认对不存在的变量会静默返回空字符串,不会抛出异常,所以最终输出是空的。
你自定义的注释分隔符配置不影响本次变量渲染,但如果没有特殊的注释格式需求,建议保留默认配置即可,避免后续写Jinja2默认注释{# 注释内容 #}时出现解析问题。
修复方法
把render方法的传参改成字典解包形式,让数据字典的键直接作为模板可访问的顶层变量即可,适配你当前模板的写法,修复后的代码:
import jinja2 templateLoader = jinja2.FileSystemLoader(searchpath="./") data_to_render = { "document_number": "123", "building_object_address": "Moscow" } templateEnv = jinja2.Environment( loader=templateLoader, # 无特殊需求可以删掉下面两行自定义注释分隔符的配置 comment_start_string='{=', comment_end_string='=}', # 可选:加下面这行配置,后续变量不存在时会直接抛错,方便排查问题 # undefined=jinja2.StrictUndefined ) template = templateEnv.get_template("income_contract_short.html") # 用**解包字典传入参数 sourceHtml = template.render(**data_to_render)
如果你不想改传参逻辑,也可以保留原有template.render(json_data=data_to_render)的写法,把模板里的变量占位符改成{{json_data.document_number}},两种方式效果一致。
内容的提问来源于stack exchange,提问作者mascai
相关产品推荐
相关产品推荐

