在django电子邮件中呈现详细信息

时间:2020-07-20 08:39:00

标签: python django

当制造日期为无时,我正在使用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

1 个答案:

答案 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模板,该模板应适当地进行转义。