satchmo mail.py отправьте html письмо вместо текстового письма

Для моего текущего магазина Satchmo я хотел бы отправлять html-письма вместо всех txt-писем. Судя по регистрационному коду учетной записи satchmo_store, все электронные письма жестко закодированы и используют формат.txt вместо формата html. например, mail.py

"""Sends mail related to accounts."""

from django.conf import settings
from django.utils.translation import ugettext
from satchmo_store.mail import send_store_mail
from satchmo_store.shop.models import Config
from satchmo_store.shop.signals import registration_sender

import logging
log = logging.getLogger('satchmo_store.accounts.mail')

# TODO add html email template
def send_welcome_email(email, first_name, last_name):
    """Send a store new account welcome mail to `email`."""

    shop_config = Config.objects.get_current()
    subject = ugettext("Welcome to %(shop_name)s")
    c = {
        'first_name': first_name,
        'last_name': last_name,
        'site_url': shop_config.site and shop_config.site.domain or 'localhost',
        'login_url': settings.LOGIN_URL,
    }
    send_store_mail(subject, c, 'registration/welcome.txt', [email],
                    format_subject=True, sender=registration_sender)

Я знаю, что вы можете изменить последнюю строку на следующую, чтобы она работала:

send_store_mail(
    subject=subject,
    context=c,
    template='registration/welcome.txt',
    recipients_list=[email],
    format_subject=True,
    sender=registration_sender,
    template_html='registration/welcome.html')

Тем не менее, было бы в моих интересах не трогать код в приложении Satchmo для целей обновления в ближайшем будущем.

Кто-нибудь знает, что было бы идеальным способом переопределить эту функцию или включить электронную почту html для всех функций, связанных с регистрацией, не касаясь приложения satchmo?

Заранее спасибо.

1 ответ

Решение

Я внес аналогичные изменения во внутреннее устройство Satchmo следующим образом:

Должна быть возможность скопировать соответствующий файл из установки Satchmo в ваше приложение django. Если вы настроите свой магазин Satchmo в соответствии с этой рекомендацией, это, вероятно, будет означать копирование satchmo/apps/satchmo_store/accounts/mail.py в /localsite/accounts/mail.py. Идея состоит в том, чтобы автоматически загружать локальную копию вместо оригинала.

В вашей локальной копии mail.py вы можете заменить функцию send_store_email(). Держите записку, чтобы вы помнили свои изменения, когда речь заходит об обновлении Satchmo. Вполне вероятно, что исходный файл останется прежним, и переопределение будет работать даже с будущими версиями.

В других случаях, когда вам нужно изменить какое-то поведение класса, вы также можете создать подкласс исходного класса, в котором один изменяет только соответствующие методы, сохраняя при этом исходное имя.

Другие вопросы по тегам