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

Есть ли в django какой-нибудь механизм для рендеринга html в обычный текст. Например, можно сделать следующее:

<h1>Title</h1>
<p>Paragraph</p>

Как:

Заголовок

Параграф

Специально для прикрепления текстовой альтернативы для писем HTML

Для рассылки:

Django включает в себя метод 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 в переменной TEMPLATES в переменной settings.py, чтобы django знал, где он должен рендерить шаблоны

Вы можете использовать render_to_string для преобразования шаблона в строку.

from django.template.loader import render_to_string
render_to_string('path_to_template',context={'key','value'})
Вернуться на верх