当制造日期为无时,我正在使用Django celery发送电子邮件。我已经成功发送了电子邮件,但是在电子邮件中,我还希望包含没有生产日期的特定订单的订单ID,该怎么办?
@shared_task
def check_for_orders():
orders = Order.objects.all()
for order in orders:
if order.manu_date is None:
send_mail('Manufacturing Reminder',
' {{order.id}} manufacturing date is none ',
'dummyguy1680@gmail.com',
['dummyguy1680@gmail.com'])
return None
答案 0 :(得分:0)
您有一些选择。最简单的方法可能是使用字符串格式:
@shared_task
def check_for_orders():
orders = Order.objects.all()
for order in orders:
if order.manu_date is None:
body = '{} manufacturing date is none '.format(order.id),
send_mail('Manufacturing Reminder',
body
'dummyguy1680@gmail.com',
['dummyguy1680@gmail.com'])
return None
如果您使用的是Python 3.6或更高版本,则还可以使用f字符串:
body = f'{order.id} manufacturing date is none '
您可以读取字符串中的Django模板:
from django.template import Template, Context
..
t = Template("{{order.id}} manufacturing date is none")
c = Context({"order": "order"})
body t.render(c)
但是在这种情况下,最好将消息模板放在单独的文件中,并使用django.template.loader.render_to_string进行渲染:
from django.template.loader import render_to_string
body = render_to_string('manufacturing_reminder.txt', {'order': order})
在manufacturing_reminder.txt
中:
{{order.id}} manufacturing date is none
注意:如果您要发送HTML电子邮件,请不要使用字符串格式来避免代码注入漏洞。使用Django模板,该模板应适当地进行转义。