众所周知(或应该知道),您可以使用Django的模板系统来渲染电子邮件正文:
def email(email, subject, template, context):
from django.core.mail import send_mail
from django.template import loader, Context
send_mail(subject, loader.get_template(template).render(Context(context)), 'from@domain.com', [email,])
在我看来,这有一个缺陷:要编辑电子邮件的主题和内容,您必须同时编辑视图和模板。虽然我可以证明向管理员用户授予对模板的访问权限,但我不会给他们访问原始Python的权限!
真正酷的是,如果您可以指定电子邮件中的块并在发送电子邮件时将它们分别提取出来:
{% block subject %}This is my subject{% endblock %}
{% block plaintext %}My body{% endblock%}
{% block html %}My HTML body{% endblock%}
但是你该如何做到呢?你将如何逐个渲染块?
loader.get_template(template_path).nodelist
更改为loader.get_template(template_path).template
。我通过https://dev59.com/a3E85IYBdhLWcg3wnU-p#29633563找到了这个解决方案。 - Phil Gyfordloader.get_template(template_path).template
更改为loader.get_template(template_path).template.nodelist
。 - Phil Gyford