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

Django中如何通过邮件发送RichTextField的POST数据?

Django发送富文本邮件报错TemplateDoesNotExist解决指导

我希望通过邮件发送富文本字段(RichTextField)或HTML字段的POST数据,但代码无法实现,且出现TemplateDoesNotExist错误,请指导。


现有代码

models.py

class Servicereport(models.Model):
    name = models.CharField(max_length=255, blank=True, null=True)
    customer = models.ForeignKey(Customer, null=True, on_delete=models.SET_NULL)
    email = models.CharField(max_length=255, null=True, blank=True)
    report = RichTextField(default='<p><b>sample data .... </b>')

class Customer(models.Model):
    name = models.CharField(max_length=255, null=True)
    last_name = models.CharField(blank=True, max_length=255, null=True)
    email = models.CharField(max_length=255, null=True)

forms.py

class ServicereportForm(ModelForm):
    class Meta:
        model = Servicereport
        fields = '__all__'
        widgets = {
            'report': RichTextFormField()
        }

views.py

def createServicereport(request):
    form = ServicereportForm()
    if request.method == 'POST':
        form = ServicereportForm(request.POST)
        if form.is_valid():
            subject = "SERVICE REPORT"
            html_message = render_to_string('report')
            message = EmailMessage(subject, html_message, 'from@email.com', [request.POST.get('email')])
            message.content_subtype = 'html'
            message.send()
            form.save()
            return redirect('/')
    context = {'form': form}
    return render(request, 'service_report.html', context)

错误信息

TemplateDoesNotExist at /create_service_report/
report
Request Method: POST
Request URL:    http://127.0.0.1:8000/create_service_report/
Django Version: 3.2.4
Exception Type: TemplateDoesNotExist
Exception Value:    
report
Exception Location: D:\development\website\venv\lib\site-packages\django\template\loader.py, line 19, in get_template
Python Executable:  D:\development\website\venv\Scripts\python.exe
Python Version: 3.7.9

解决步骤

1. 修正render_to_string调用错误

错误核心是render_to_string('report')未指定完整模板文件名(如report.html),且未传递富文本内容到模板。修改views.py对应代码:

def createServicereport(request):
    form = ServicereportForm()
    if request.method == 'POST':
        form = ServicereportForm(request.POST)
        if form.is_valid():
            subject = "SERVICE REPORT"
            # 传递表单验证后的富文本内容,指定完整模板文件名
            html_message = render_to_string('email_report.html', {
                'report_content': form.cleaned_data['report']
            })
            # 使用表单验证后的邮箱,比直接取POST更安全
            recipient_email = form.cleaned_data['email']
            message = EmailMessage(subject, html_message, 'from@email.com', [recipient_email])
            message.content_subtype = 'html'
            message.send()
            form.save()
            return redirect('/')
    context = {'form': form}
    return render(request, 'service_report.html', context)

2. 创建邮件模板文件

在项目templates目录下新建email_report.html,内容可按需调整:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>服务报告</title>
</head>
<body>
    <h2>服务报告详情</h2>
    <!-- 用|safe过滤器确保HTML内容被正确渲染 -->
    {{ report_content|safe }}
</body>
</html>

3. 确认模板目录配置

检查settings.py的TEMPLATES配置,确保包含模板所在目录:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR / 'templates'],  # 确保此处包含你的模板目录
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

4. 验证富文本组件配置

若使用第三方富文本组件(如django-ckeditor),需确认:

  • 已执行pip install django-ckeditor安装
  • settings.py的INSTALLED_APPS中添加了ckeditor
  • 媒体文件路径等相关配置已正确设置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 00:52:42