рендеринг html-шаблонов с помощью писем, отправленных через django

#django #templates

#django #шаблоны

Вопрос:

У меня есть шаблон django, который я должен отправить в виде тела электронного письма, переменные, которые я отправляю, отображаются в электронном письме соответствующим образом, но html-теги, используемые в шаблоне, не отображаются.Вот код..

 t = loader.get_template('registration/subscription_employee.html')
                c = {'site_name': current_site.domain,'user': user,'employer':employer}
                send_mail(("Subscription Agreement of %s")%data['username'], t.render(Context(c)), None, [settings.PAYPAL_PRIMARY_EMAIL,data['email']],fail_silently = True) 
  

как я могу гарантировать, что html-теги также отображаются соответствующим образом.

Ответ №1:

По умолчанию django отправляет текстовые / обычные электронные письма, поэтому вы не увидите никакого HTML в своих письмах.

Вы можете изменить это, взгляните на документацию

 from django.core.mail import EmailMultiAlternatives

subject, from_email, to = 'hello', 'from@example.com', 'to@example.com'
text_content = 'This is an important message.'
html_content = '<p>This is an <strong>important</strong> message.</p>'
msg = EmailMultiAlternatives(subject, text_content, from_email, [to])
msg.attach_alternative(html_content, "text/html")
msg.send()
  

Ответ №2:

Вам нужно либо использовать attach_alternative(), либо указать подтип содержимого для вашего сообщения. Смотрите документы по отправке HTML-писем:http://docs.djangoproject.com/en/1.3/topics/email /. Специфичная для HTML информация находится примерно на полпути вниз по странице. Надеюсь, это вам поможет.

Ответ №3:

Вы отправляете HTML-сообщение в виде обычного текстового электронного письма. Если вы хотите отправлять только HTML, используйте EmailMessage и установите добавить заголовок {'Content-type': 'text/html'} . Гораздо более удобным для пользователя решением было бы отправлять как текст, так и HTML с помощью EmailMultiAlternatives.