Сохраняя СУХОЙ с отправкой почты в Джанго - PullRequest
0 голосов
/ 21 мая 2011

У меня есть следующие два блока кода в МНОГИХ моих представлений. Я ищу способ абстрагировать их, чтобы вместо повторения этого кода в каждом представлении. Конечно, получатель, строка темы и тело могут отличаться, поэтому я бы хотел передать эти строки этой функции - «функция» - это правильный термин для использования, верно?

mailt = loader.get_template('membership/signup_email.txt')
mailc = Context({
    'signin_url': signin_url,
    'name': firstname + ' ' + lastname,
    'username': username,
    'membership_level': membership_level.name,
    'membership_number': membership_number,
    'payment_plan': payment_plan
})
msg = EmailMessage(
    'You are now a Member!',
    mailt.render(mailc),
    'membership@domain.org',
    [email]
)
msg.content_subtype = "html"
msg.send()

# Nofity our staff
admin_mailt = loader.get_template('membership/signup_admin_email.txt')
admin_mailc = Context({
    'site': current_site,
    'user': user,
    'payment_plan': payment_plan
})
admin_msg = EmailMessage(
    '[myproject] New Membership Signup',
    admin_mailt.render(admin_mailc),
    'membership@domain.org',
    ['membership@domain.org']
)
admin_msg.content_subtype = "html"
admin_msg.send()

Ответы [ 2 ]

0 голосов
/ 21 мая 2011

Вы можете использовать встроенные методы электронной почты django и немного абстрагировать их, чтобы получить то, что вы хотите, это не будет вам так дорого стоить, но вот, пожалуйста.

См. Документацию здесь: http://docs.djangoproject.com/en/1.3/topics/email/

Вот как вы используете встроенный метод электронной почты django.

from django.core.mail import send_mail

send_mail('Subject here', 'Here is the message.', 'from@example.com',
    ['to@example.com'], fail_silently=False)

Так что один из приведенных выше примеров превратился бы в это.

# Nofity our staff
admin_mailt = loader.get_template('membership/signup_admin_email.txt')
admin_mailc = Context({
    'site': current_site,
    'user': user,
    'payment_plan': payment_plan
})

send_mail('[myproject] New Membership Signup', admin_mailt.render(admin_mailc), 'membership@domain.org', ['membership@domain.org'])

Вы могли бы немного обернуть это, чтобы вы могли просто передать имя шаблона и контекст, и это сделало бы его немного чище.

send_my_email(subject, to_address, template, context, from_address='membership@domain.org'):
    admin_mailt = loader.get_template(template)
    send_mail(subject, admin_mailt.render(context), from_address, to_address)
0 голосов
/ 21 мая 2011

Я не уверен, откуда все ваши переменные ... но ... не могли бы вы просто создать функцию, скажем, utils.py? Поместите туда приведенный выше код и при необходимости вызовите его с параметрами. Так что ваши взгляды могут выглядеть примерно так. Вызов функции, которую вы создали в другом месте.

custom_send_mail(recipient, subject, body)
...