如何将 django html 模板呈现为纯文本?

How to render django html templates as plain text?

django 中是否有任何机制可以将 html 呈现为纯文本。例如渲染以下内容:

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

作为:

标题

段落

专门为 HTML 封电子邮件附加替代文本

编辑:我不是在问 HTML 字符串。我的实际意思是没有标签的纯文本。只考虑换行之类的事情。类似lynx浏览器。

邮寄:

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 作为字符串正常发送:

您可以 return 一个 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) 

但好的做法始终是 return 一个模板,如果您只想呈现一个标签,将模板保存在其他目录中并不重要。您可以为此使用 render 方法:

from django.shortcuts import render

def index(request):
    return render(request, 'index.html')

注意:确保在 settings.pyTEMPLATES 变量中指定模板文件夹,这样 django 就会知道应该在哪里渲染模板

您可以使用 render_to_string 将模板转换为字符串。

from django.template.loader import render_to_string
render_to_string('path_to_template',context={'key','value'})