在Satchmo商店中,我需要将一个小的.png(条形码)附加到django在完成订单时发送的电子邮件中。电子邮件使用send_order_confirmation()格式化为HTML格式,调用send_store_mail()(两者都是satchmo的一部分。)这些函数都没有提供附加文件的能力(我认为)所以我应该重新编写它们吗?我想知道使用信号是否可能/更好。也许rendering_store_mail()?
顺便说一句,条形码会动态生成,因此无法在某处的某个服务器上建立文件链接。
非常感谢, 托马斯
答案 0 :(得分:0)
我也必须在确认电子邮件中添加额外的信息,但只有文字。因此,这将是使用信号向电子邮件添加额外内容的非常简单的方法,恕我直言,这是最好的方法。如果可以避免覆盖satchmo-core,请始终使用信号; - )
定义您的侦听器以添加渲染的上下文。在这种情况下,我正在添加额外注释字段的内容,并且假设有一个名为get_barcode_img(<order>)
的函数的上下文,该订单的条形码。我也在这里假设,get_barcode_img
函数不仅会返回一个png,而且还会返回类似于MIMEImage(如from email.MIMEImage import MIMEImage
)的内容,以便能够将其包含在内联中。此外,可能需要更多的信息,例如img的MIME标题。
# localsite/payment/listeners.py
def add_extra_context_to_store_mail(sender,
send_mail_args={}, context={}, **kwargs):
if not 'order' in context:
return
context['barcode_header'] = get_barcode_header(context['order'])
context['barcode_img'] = get_barcode_img(context['order'])
context['notes'] = context['order'].notes
将侦听器连接到信号某处可以“发现”的信号,例如models.py
:
# localsite/payment/models.py
from satchmo_store.shop.signals import rendering_store_mail, order_notice_sender
rendering_store_mail.connect(payment_listeners.add_extra_context_to_store_mail, sender=order_notice_sender)
在本地覆盖模板(例如order_placed_notice.html
)以添加新上下文。请注意放置模板的位置,因为路径对于django采用新模板而不是satchmo的模板至关重要。在这种情况下,从项目的根路径开始,可能有一个templates-folder,在其中,必须有与satchmo-folder完全相同的路径。例如。 /templates/shop/email/order_placed_notice.html ...这可以应用于应用内的任何“有效”模板文件夹。由您来决定模板的组织位置和方式。
<!-- templates/shop/email/order_placed_notice.html -->
<!DOCTYPE ...><html>
<head>
<!-- include the image-header here somewhere??? -->
<title></title>
</head>
<body>
...
Your comments:
{{ notes }}
Barcode:
{{ barcode_img }}"