Python中Jinja模板引用文件未填充内容问题排查
解决Jinja2 include模板内容不渲染的问题
问题分析
你遇到的情况是Jinja2能识别被引用的文件(输入错误文件名会触发报错),但无法将文件内容填充到主模板中,这是因为Jinja2默认的自动转义机制针对HTML场景设计,在处理SQL这类纯文本模板时会影响内容输出,尤其在3.1.4版本中需要针对性调整配置。
解决方案
方案1:关闭全局自动转义
修改Environment初始化代码,添加autoescape=False参数,适配SQL这类无需HTML转义的纯文本模板:
from jinja2 import Environment, FileSystemLoader # 关闭自动转义,确保纯文本内容直接输出 env = Environment(loader=FileSystemLoader('templates'), autoescape=False) template = env.get_template('queries/sample_query.sql') # 打印渲染结果查看完整内容 print(template.render())
方案2:捕获内容并标记为安全
若不想修改全局配置,可在sample_query.sql模板中用capture标签捕获引用内容,再通过safe过滤器强制输出原始文本:
{% capture values %} {% include 'common/sample_values.sql' %} {% endcapture %} SELECT * FROM tablename WHERE col IN {{ values | safe }}
验证效果
修改后重新运行代码,输出会变为:
SELECT * FROM tablename WHERE col IN ('value1', 'value2', 'value3')
内容的提问来源于stack exchange,提问作者krock
相关产品推荐
相关产品推荐

