如何在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
相关产品推荐
相关产品推荐

