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

如何在Django数据库字段中存储模板变量并实现动态填充?

在Django数据库存储模板变量并动态填充邮件内容的实现方案

完全可以实现这个需求,这在Django项目里是很常见的场景,下面是具体的操作方法:

1. 存储带变量的模板内容到数据库

你给出的Message模型定义完全没问题,用TextField来存储带{{ }}变量的文本内容就可以。数据库只会把这些内容当作普通字符串保存,不会提前解析变量,所以直接通过HTML表单提交并保存到message字段即可,比如你示例里的:

Hi {{ user.first_name }}, thanks for signing up to our {{ company.name }} newsletter.

这段内容可以正常存入数据库。

2. 发送邮件时动态渲染模板变量

要让变量自动填充,需要用到Django自带的模板引擎来渲染从数据库取出的内容,具体代码示例如下:

from django.template import Template, Context
from django.core.mail import send_mail
from .models import Message

# 从数据库获取保存的模板内容
message_template = Message.objects.get(pk=1).message

# 准备需要填充的变量数据(这里根据你的实际业务获取对应的对象)
user = request.user  # 当前请求的用户对象
company = YourCompanyModel.objects.get(pk=1)  # 你的公司信息对象

# 使用Django模板引擎渲染内容
template = Template(message_template)
context = Context({
    'user': user,
    'company': company
})
rendered_content = template.render(context)

# 发送渲染后的邮件
send_mail(
    subject="订阅确认",
    message=rendered_content,
    from_email="noreply@yourdomain.com",
    recipient_list=[user.email],
    fail_silently=False
)

3. 注意事项

  • 安全防护:如果允许普通用户提交模板内容,要注意过滤掉{% %}这类模板标签,只保留{{ }}变量语法,避免恶意代码执行。可以用正则表达式对输入内容做校验,或者使用Django的模板安全机制限制可执行的内容。
  • 变量容错:渲染时要确保上下文里的变量都存在,或者给变量加上default过滤器,比如{{ user.first_name|default:"朋友" }},避免因变量缺失导致渲染错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 10:20:33