2012-04-14 109 views
0

在Satchmo商店中,我需要將一個小的.png(條形碼)附加到django完成訂單時發送的電子郵件中。該電子郵件使用send_order_confirmation()調用send_order_confirmation()來格式化,send_store_mail()(都是satchmo的一部分)。這些函數都不能提供附加文件的功能(我認爲),所以我應該重寫它們嗎?我想知道是否可以/更好地使用信號做到這一點。也許rendering_store_mail()?將.png文件附加到由satchmo發送的電子郵件

順便說一句,條碼會動態生成,所以沒有辦法鏈接到某個服務器上的某個文件。

非常感謝, 托馬斯

回答

0

好,我也曾經有過額外的相關信息添加到確認電子郵件,只有文字雖然。所以這將是使用信號爲電子郵件添加額外內容的簡單方法,恕我直言,這是最好的方法。如果您可以避免覆蓋satchmo-core,請始終使用信號;-)

  1. 定義您的偵聽器爲渲染添加一些上下文。在這種情況下,我將一個額外的註釋字段的內容添加到該上下文中,並假定該命令的條形碼(假定有一個名爲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 
    
  2. 監聽器連接到某個地方的代碼將被「發現」可以肯定的信號,如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) 
    
  3. 覆蓋模板局部(如order_placed_notice.html)添加新的上下文。請注意放置模板的位置,因爲路徑對於django採用新模板而不是satchmo的模板非常重要。在這種情況下,從項目的根路徑開始,可能有一個模板文件夾,並且在其中,必須有與satchmo文件夾中完全相同的路徑。例如。 /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 }}"