0

Satchmo Store では、注文の完了時に django が送信する電子メールに小さな .png (バーコード) を添付する必要があります。電子メールは send_store_mail() を呼び出す send_order_confirmation() を使用して HTML でフォーマットされます (どちらも satchmo の一部です)。これらの関数のどちらもファイルを添付する機能を提供していません (私は思う)。シグナルを使用してこれを行うことが可能/より良いかどうか疑問に思っていました。おそらく render_store_mail() ですか?

ところで、バーコードは動的に生成されるため、どこかにあるサーバー上のファイルへのリンクを持つ方法はありません。

どうもありがとう、トーマス

4

1 に答える 1

0

私も確認メールに追加情報を追加する必要がありましたが、テキストのみでした。したがって、これはシグナルを使用して電子メールに余分なものを追加する非常に簡単な方法であり、IMHO はそれを行うための最良の方法です。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 がサッチモのテンプレートの代わりに新しいテンプレートを取得するために不可欠です。この場合、プロジェクトのルート パスから開始して、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 }}"
    
于 2012-04-24T08:16:19.203 に答える