#django #email #template-engine
Вопрос:
Есть ли в django какой-либо механизм для отображения html в виде обычного текста. Например, визуализируйте следующее:
<h1>Title</h1>
<p>Paragraph</p>
Как:
Название
Параграф
Специально для прикрепления текстовой альтернативы для HTML-писем
Редактировать: Я не спрашиваю о HTML-строке. На самом деле я имею в виду простой текст без тегов. Только учитывая такие вещи, как новые линии. Похоже на браузер lynx.
Ответ №1:
Для рассылки:
Джанго включает django.core.mail.send_mail
в себя метод
from django.core import mail
from django.template.loader import render_to_string
from django.utils.html import strip_tags
subject = 'Subject'
# mail_template.html is in your template dir and context key you can pass to
# your template dynamically
html_message = render_to_string('mail_template.html', {'context': 'values'})
plain_message = strip_tags(html_message)
from_email = 'From <from@example.com>'
to = 'to@example.com'
mail.send_mail(subject, plain_message, from_email, [to], html_message=html_message)
Это приведет к отправке электронного письма, которое будет отображаться в обоих браузерах с поддержкой html и будет отображать обычный текст в просмотрщиках поврежденной электронной почты.
Чтобы отправить обычный html в виде строки:
Вы можете вернуть HttpResponse
и передать строку, содержащую допустимый HTML-код
from django.http import HttpResponse
def Index(request):
text = """
<h1>Title</h1>
<p>Paragraph</p>
"""
# above variable will be rendered as a valid html
return HttpResponse(text)
Но хорошей практикой всегда является возврат шаблона и сохранение шаблонов в других каталогах, не имеет значения, хотите ли вы отобразить только один тег. Вы можете использовать render
метод для этого:
from django.shortcuts import render
def index(request):
return render(request, 'index.html')
Примечание: убедитесь, что вы указали папку шаблонов в TEMPLATES
переменной in settings.py
, чтобы django знал форму, в которой он должен отображать шаблоны
Комментарии:
1. «strip_tags» — это то, что я искал, Большое спасибо, Шубхам.
Ответ №2:
Вы можете использовать render_to_string для преобразования шаблона в строку.
from django.template.loader import render_to_string
render_to_string('path_to_template',context={'key','value'})