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

Django如何实现帖子发布时间显示为相对时长而非完整日期

Django 实现显示相对发布时间的解决方案

Django 内置了成熟的相对时间处理能力,不需要手动实现时间差计算逻辑,按以下步骤操作即可实现「X小时前」这类时间展示效果:

方案一:使用官方自带 humanize 组件(推荐)

步骤1:激活组件

打开项目 settings.py 文件,在 INSTALLED_APPS 配置列表中添加 django.contrib.humanize:

INSTALLED_APPS = [
    # 原有其他配置保持不变
    'django.contrib.humanize',
]

步骤2:模板加载标签

在你渲染帖子的模板文件顶部添加标签加载声明:

{% load humanize %}

步骤3:修改时间渲染代码

将原模板中渲染 created 字段的代码替换为带过滤器的写法:

@{{post.author}} - <small><i>{{ post.created|naturaltime }} </i></small> <br>

如果最终显示为英文相对时间,检查 settings.py 中的 LANGUAGE_CODE 配置是否为 zh-hans 即可切换为中文展示。

方案二:自定义模型属性(适合需要高度自定义展示逻辑的场景)

在你的 post 模型中新增一个计算相对时间的属性:

from django.utils import timezone
import math

class post(models.Model):
    # 原有字段保持不变
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    Topic = models.ForeignKey(topic, on_delete=models.CASCADE)
    post = models.TextField(max_length=500)
    created = models.DateTimeField(auto_now_add=True)
    update = models.DateTimeField(auto_now=True)
    liked = models.ManyToManyField(User, related_name='likes', default=None, blank=True)
    
    # 新增相对时间计算属性
    @property
    def time_since_created(self):
        now = timezone.now()
        diff = now - self.created
        if diff.days >= 365:
            return f"{diff.days//365}年前"
        elif diff.days >= 30:
            return f"{diff.days//30}个月前"
        elif diff.days > 0:
            return f"{diff.days}天前"
        elif diff.seconds >= 3600:
            return f"{diff.seconds//3600}小时前"
        elif diff.seconds >= 60:
            return f"{diff.seconds//60}分钟前"
        else:
            return "刚刚"

    # 原有其他方法保持不变
    def __str__(self):
        return f'{self.post}'
    
    @property
    def num_likes(self):
        return self.liked.all().count()

修改模板中时间渲染代码即可:

@{{post.author}} - <small><i>{{ post.time_since_created }} </i></small> <br>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:15:07