Как создать функцию для отправки электронной почты, форматирующей html-сообщение со списком переменных?
Я пытаюсь создать функцию в django для отправки моих HTML шаблонов электронной почты с определенными переменными.
Вот что у меня есть на данный момент:
from django.core.mail import send_mail
from django.template.loader import render_to_string
from django.core.mail import get_connection
from django.utils.html import strip_tags
from otr import settings
def send_email(subject, email_template, recipient, username, password, variable_list):
html_message = render_to_string(email_template, {'context': 'values'})
for variable in variable_list:
html_message.format(variable)
plain_message = strip_tags(html_message)
recipient = recipient
with get_connection(
host=settings.EMAIL_HOST,
port=settings.EMAIL_PORT,
username=username,
password=password,
use_tls=True
) as connection:
send_mail(subject, plain_message, 'Me', [recipient], fail_silently=False,
html_message=html_message, connection=connection)
Затем я хочу вызвать эту функцию для использования в различных представлениях django, например:
subject = "My subject"
email_template = "emails/followup_email.html"
recipient = queryset.customer_email
username = username_variable
password = password_variable
customer_name = "Bob"
dear_user = "my_name"
phone_number = "1111111111"
sincerely_user = "my_name"
variable_list = [customer_name, dear_user, phone_number, sincerely_user]
send_email(subject, email_template, recipient, username, password, variable_list)
Я продолжаю получать "Replacement index 1 out of range for positional args tuple", поэтому я предполагаю, что не могу сделать цикл for таким образом, чтобы отформатировать HTML письмо со списком переменных. Кто-нибудь знает, как сделать это по-другому?
Предполагая, что все остальное правильно Replacement index 1 out of range for positional args tuple
ошибка, которую вы получаете, вызвана циклом for в функции send_email
. Замените эти две строки на -
html_message.format(*variable_list)
Примечание: Строка html_message
должна содержать столько же заполнителей {}
, сколько элементов в variable_list
, т.е. 4
в данном случае, чтобы format
работала правильно.