You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django中将HTML模板渲染为不含标签的纯文本?

Django HTML转纯文本实现方案

Django本身没有内置专门实现类lynx效果的HTML转纯文本的机制,但可以通过以下几种方案快速实现需求:

方案1:内置striptags工具(仅适合简单场景)

  • 特点:Django自带无需额外依赖,仅能剥离所有HTML标签,不会保留块级元素的换行格式
  • 用法:
    1. 模板中使用:{{ html_content|striptags }}
    2. Python代码中使用:
    from django.utils.html import strip_tags
    plain_text = strip_tags("<h1>Title</h1><p>Paragraph</p>")
    
  • 缺陷:你的示例输入处理后会得到TitleParagraph,丢失换行,不符合需求。

方案2:基于BeautifulSoup自定义实现(可控性高)

  • 特点:可自定义块级元素的换行规则,满足基础的格式保留需求,效果符合你的示例要求
  • 前置依赖:安装beautifulsoup4库
  • 代码实现:
from bs4 import BeautifulSoup
import re

def html_to_plain_text(html):
    soup = BeautifulSoup(html, "html.parser")
    # 给所有块级元素后追加换行
    block_tags = ["h1", "h2", "h3", "h4", "h5", "h6", "p", "div", "li", "br", "hr"]
    for tag in block_tags:
        for element in soup.find_all(tag):
            element.insert_after("\n")
    # 提取纯文本
    plain_text = soup.get_text()
    # 清理多余空行
    plain_text = re.sub(r"\n\s*\n", "\n\n", plain_text).strip()
    return plain_text
  • 效果:你的示例输入调用后输出为:
Title
Paragraph

方案3:使用html2text库(效果最接近lynx浏览器)

  • 特点:专门用于HTML转Markdown风格纯文本,自动处理列表符号、链接、图片等元素,完全满足邮件纯文本替代版本的需求
  • 前置依赖:安装html2text库
  • 代码实现:
import html2text

def html_to_plain_text(html):
    converter = html2text.HTML2Text()
    # 自定义配置
    converter.ignore_links = False # 设为True则忽略链接,仅保留链接文本
    converter.ignore_images = True
    converter.body_width = 0 # 取消自动换行限制
    return converter.handle(html).strip()

邮件场景最佳实践

Django发送多格式邮件时,使用EmailMultiAlternatives类分别附加HTML版本和纯文本版本即可:

from django.core.mail import EmailMultiAlternatives

subject = "邮件主题"
from_email = "sender@example.com"
to = ["recipient@example.com"]
text_content = "你生成的纯文本内容"
html_content = "你的HTML邮件内容"

msg = EmailMultiAlternatives(subject, text_content, from_email, to)
msg.attach_alternative(html_content, "text/html")
msg.send()

内容的提问来源于stack exchange,提问作者user11632619

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 17:42:00