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

如何在Wagtail/Django中移除RichTextField内容的HTML标签?

在Wagtail/Django中提取RichTextBlock的纯文本内容(无需正则)

你不需要用正则或直接读取raw_data,Wagtail和Django都有原生方法可以提取RichText的纯文本:

方法1:Wagtail原生方案(推荐)

Wagtail的RichText对象自带render_as_text()方法,专门用于将富文本转换为带基本格式的纯文本(比如保留段落换行、列表缩进等)。

正确代码示例

不要直接操作raw_data,直接遍历你的StreamField对象(post.faq)即可:

for faq_item in post.faq:
    # faq_item是FaqBlock的实例,直接访问answer字段
    print(faq_item.answer.render_as_text())

如果习惯通过value字典访问:

for faq_item in post.faq:
    print(faq_item.value['answer'].render_as_text())

方法2:Django原生方案

如果只需要简单移除所有HTML标签,可以用Django内置的strip_tags工具:

from django.utils.html import strip_tags

for faq_item in post.faq:
    raw_html = faq_item.value['answer'].source  # 获取原始HTML内容
    plain_text = strip_tags(raw_html)
    print(plain_text)

为什么raw_data不行?

raw_data存储的是StreamField的原始序列化数据,其中RichTextBlock的内容就是未处理的HTML字符串,所以直接读取会得到带标签的内容。而直接访问Block实例的字段时,Wagtail会返回RichText对象,提供了专门的文本处理方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 04:09:25