Как визуализировать html-шаблоны django в виде обычного текста?

#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'})