Определение темы письма в шаблоне Django

Допустим, я хочу отправить электронное письмо, используя метод send_mail(). Тело письма находится в файле templates/email.html. Я хотел бы определить тему письма в том же файле, чтобы все было в одном месте. Но send_mail() нужно, чтобы тема была в отдельной переменной.

Поэтому я придумал уродливый способ сделать это. Я начинаю шаблон следующим образом:

{% comment "The second line of this template will be used as email subject" %}
Congratulations, your account was created!
{% endcomment %}

А затем извлеките его в коде следующим образом:

template = loader.get_template('email.html')
subject = template.template.source.splitlines()[1]

Это работает, но мне не нравится это решение. Есть ли более простой и читабельный способ сделать это?

В более общем случае, могу ли я определить переменную в шаблоне Django и затем извлечь ее в приложении? Что-то вроде template.get_variable("email_subject")?

Я бы сделал это так, как это делает Django, имея два отдельных шаблона, один для темы, другой для тела.

subject = loader.render_to_string(subject_template_name, context)
# Email subject *must not* contain newlines
subject = "".join(subject.splitlines())
body = loader.render_to_string(email_template_name, context)

Вы можете увидеть пример в кодовой базе Django для их письма с забытым паролем https://github.com/django/django/blob/9ac3ef59f9538cfb520e3607af743532434d1755/django/contrib/auth/forms.py#L274

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