Django рендерит HTML-файл без включения статических файлов (стилей CSS, изображений).

Там я попытался отобразить HTML-файл

    html_message = get_template('mail.html').render(context=data)
    email = EmailMultiAlternatives(
        "Subject",
        html_message,
        settings.EMAIL_HOST_USER,
        ['example@gmail.com', ],
    )
    email.attach_alternative(html_message, 'text/html')
    email.send(fail_silently=False)

Файл HTML

    {% load static %}
    <!doctype html>
    <html lang="en">
      <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>Title</title>
      <link rel="stylesheet" href="{% static 'mail.css' %}">
    </head>
    <body>
      <header>
        <div>
          <img class="logo" src="{% static 'logo.svg' %}" alt="">
        </div>
      </header>
    </body>

Как результат HTML файл был отрисован без статических файлов

Проблема в том, что сгенерированная часть с помощью static использует относительные URL для статических активов (например, /static/logo.svg). Я думаю, что это ожидаемое поведение, и поскольку URL не является абсолютным (отсутствует часть имени хоста), почтовый клиент никак не сможет получить его правильно.

Это также объясняет, почему он работает в онлайн-версии.

Вы можете найти хорошую зацепку здесь: Django Получение абсолютных url для статических файлов

Редактирование: более точно, тег static генерирует путь актива, используя настройку STATIC_URL, которую люди обычно используют по умолчанию static/. Одним из способов решения вашей проблемы было бы установить здесь абсолютный базовый url (т.е. https://your-hostname.com/static/)

Вернуться на верх