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

如何在Django的views.py中获取数据库content字段内容并计算阅读时间?

问题分析与解决方法

首先,你的代码里有几个小问题导致无法正确获取content字段:

  • 在get_context_data中,context.content的写法错误,DetailView的上下文里,当前的Post对象默认以object或者模型名小写(也就是post)作为键,所以应该用context['object'].content来获取内容。
  • print(all_texts[texts])这里的texts没有加引号,应该写成print(all_texts['texts']),不过其实没必要把内容放进新字典里,直接获取使用更简洁。

接下来,我们来实现获取content并计算阅读时间的完整方案:

步骤1:正确获取Post的content内容并计算阅读时间

你已经在get_object方法里处理浏览量更新,顺便在这里计算阅读时间会更合理,避免重复获取对象:

from datetime import time

class PostDetailView(DetailView):
    model = Post

    def get_object(self):
        obj = super().get_object()
        # 更新浏览量
        obj.view_count += 1
        
        # 获取当前文章的content内容
        content = obj.content
        
        # 计算阅读时间:这里假设中文阅读速度为300字/分钟(可根据需求调整)
        if content:
            # 去掉内容前后空白字符后统计字数
            word_count = len(content.strip())
            # 向上取整计算分钟数,比如150字算1分钟,400字算2分钟
            minutes_needed = (word_count + 299) // 300
            # 转换为Time对象存储,比如1分钟对应00:01:00
            obj.read_time = time(minute=minutes_needed)
        
        obj.save()
        return obj

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        # 如果你需要打印content内容,直接这样即可
        print(context['object'].content)
        return context

步骤2:阅读时间计算的优化说明

  • 如果是英文内容,可以把阅读速度调整为250字/分钟左右,根据实际场景灵活修改数值。
  • 若content包含HTML标签,计算字数前建议先剥离标签,避免统计无效字符:
    from bs4 import BeautifulSoup
    # 先提取纯文本再统计字数
    pure_text = BeautifulSoup(obj.content, "html.parser").get_text()
    word_count = len(pure_text.strip())
    
  • 如果你需要更精确的时长(比如包含秒数),可以这样计算:
    seconds_needed = int((word_count / 300) * 60)
    minutes = seconds_needed // 60
    seconds = seconds_needed % 60
    obj.read_time = time(minute=minutes, second=seconds)
    

额外提醒

如果read_time字段只是用来存储阅读时长,而非具体时间点,也可以考虑改用DurationField(Django 1.8+支持),它专门用于存储时间段,使用起来会更贴合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 22:32:43