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

如何将Python变量插入HTML邮件模板?(Kafka消费场景)

解决HTML模板变量替换与大括号冲突、避免覆盖原文件的方案

1. 用Jinja2模板引擎(首推)

Jinja2是专门的模板渲染工具,天生适配HTML场景,完全不会和HTML里的大括号冲突,还支持循环、条件判断这类复杂逻辑,而且能彻底避免覆盖原模板文件的问题。

步骤很简单:

  • 先装依赖:pip install jinja2
  • 把你的HTML模板存成单独文件(比如email_template.html),需要替换姓名的地方用{{ name }}和{{ surname }}标记就行,其他地方的大括号该怎么写就怎么写
  • 读取模板文件到内存里渲染,原文件全程只读,不会被修改

示例代码:

from jinja2 import Template

# 只读模式打开模板文件,把内容读到内存
with open('email_template.html', 'r', encoding='utf-8') as f:
    template_content = f.read()

# 假设从Kafka拿到的消息
kafka_msg = {"name": "张三", "surname": "李"}

# 渲染生成最终邮件HTML
template = Template(template_content)
final_email_html = template.render(name=kafka_msg['name'], surname=kafka_msg['surname'])

# 接下来直接用final_email_html发邮件就行,原模板文件完全没变

对应的模板文件示例:

<html>
    <body>
        <h1>您好,{{ name }} {{ surname }}!</h1>
        <p>这是为您定制的邮件内容...</p>
        <!-- 这里的JavaScript大括号完全不受影响 -->
        <script>
            const userConfig = { userId: 123, status: "active" };
        </script>
    </body>
</html>

2. 原生字符串格式化:转义大括号

如果不想加第三方库,用Python自带的字符串格式化也能解决,只要把HTML里原本的{}改成{{}}来转义,这样格式化时只会替换你指定的变量占位符。

示例代码:

# 同样只读打开模板文件
with open('email_template.html', 'r', encoding='utf-8') as f:
    template_content = f.read()

kafka_msg = {"name": "张三", "surname": "李"}

# 模板里的变量用{name}、{surname},原HTML的大括号要写成{{}}
final_email_html = template_content.format(name=kafka_msg['name'], surname=kafka_msg['surname'])

比如模板里的JS部分要改成这样:

<script>
    const userConfig = {{ userId: 123, status: "active" }};
</script>

核心注意事项

不管用哪种方法,绝对不要把渲染后的内容写回原模板文件,所有操作都在内存里完成,原模板始终以只读方式加载,这样就彻底避免了覆盖问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 17:15:32