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

Django中如何从CKEditor存储的富文本内容里仅提取第一段?

Django富文本字段提取第一段内容的实现方案

方案1:正则表达式快速实现(适合格式规则的简单场景)

无需额外安装依赖,直接在Post模型中新增自定义方法即可:

import re
import datetime

from ckeditor.fields import RichTextField
from django.db import models


class Post(models.Model):
    name = models.CharField(max_length=250)
    content = RichTextField()
    date = models.DateField(default=datetime.date.today)

    def get_first_paragraph(self):
        # 匹配第一个<p>标签内的内容,自动忽略标签属性
        match = re.search(r'<p[^>]*>(.*?)</p>', self.content, re.DOTALL)
        return match.group(1).strip() if match else ''

调用方式:

获取单篇博文的第一段直接调用post.get_first_paragraph()即可。

方案2:BeautifulSoup解析(适配复杂富文本格式,更稳定)

如果富文本内容存在p标签带类名、行内样式、嵌套其他标签的情况,推荐用专业HTML解析库处理,避免正则匹配遗漏:

  1. 先安装依赖:
pip install beautifulsoup4
  1. 模型中新增方法:
from bs4 import BeautifulSoup
import datetime

from ckeditor.fields import RichTextField
from django.db import models


class Post(models.Model):
    name = models.CharField(max_length=250)
    content = RichTextField()
    date = models.DateField(default=datetime.date.today)

    def get_first_paragraph(self):
        soup = BeautifulSoup(self.content, 'html.parser')
        first_p = soup.find('p')
        return first_p.get_text().strip() if first_p else ''

补充说明

  • 如果需要把提取的第一段作为独立摘要字段存储,可以重写模型的save方法,在保存博文时自动提取内容存储到新增的summary字段里,避免每次查询都重复解析。
  • 若富文本第一段为空,两个方法都会返回空字符串,可根据业务需求调整默认返回值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:24:07