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

如何自定义Django humanize中naturaltime模板过滤器的文本?

自定义Django humanize的naturaltime过滤器输出格式

方法一:通过本地化翻译覆盖默认文本

这种方法利用Django的i18n机制修改默认文案,适合需要统一调整多语言输出的场景:

  • 在项目根目录创建locale文件夹,然后在settings.py中配置本地化路径:
    LOCALE_PATHS = [
        BASE_DIR / 'locale',
    ]
    
  • 提取humanize应用的翻译字符串到项目locale目录(以中文为例,替换为你实际使用的语言代码):
    django-admin makemessages -l zh-hans -d django
    
  • 打开生成的locale/zh-hans/LC_MESSAGES/django.po文件,搜索未来日期对应的翻译条目:
    找到类似如下的原条目:
    msgid "%d days from now"
    msgstr "%d天后"
    
    msgid "%d day from now"
    msgstr "%d天后"
    
    修改为你需要的格式:
    msgid "%d days from now"
    msgstr "in %d d"
    
    msgid "%d day from now"
    msgstr "in %d d"
    
    (如果需要调整小时、分钟等其他未来时间单位的输出,找到对应的条目修改即可)
  • 编译翻译文件使其生效:
    django-admin compilemessages
    
  • 确保settings.py中的LANGUAGE_CODE配置正确,之后模板里的naturaltime就会输出自定义格式。

方法二:自定义模板过滤器重写逻辑

如果不需要全局修改翻译,也可以直接写一个自定义过滤器,完全控制输出逻辑:

  • 在你的应用目录下创建templatetags文件夹(记得添加__init__.py文件),然后新建custom_humanize.py:
    from django import template
    from django.utils.timezone import now
    
    register = template.Library()
    
    @register.filter
    def custom_naturaltime(value):
        current_time = now()
        if value > current_time:
            delta = value - current_time
            # 按秒、分钟、小时、天分级处理
            if delta.days == 0:
                if delta.seconds < 60:
                    return f"in {delta.seconds} s"
                elif delta.seconds < 3600:
                    minutes = delta.seconds // 60
                    return f"in {minutes} m"
                else:
                    hours = delta.seconds // 3600
                    return f"in {hours} h"
            else:
                return f"in {delta.days} d"
        # 过去的时间保留原naturaltime的逻辑,也可以自行修改
        else:
            from django.utils.timesince import timesince
            return f"{timesince(value, current_time).split(', ')[0]} ago"
    
  • 在模板中加载并使用这个自定义过滤器:
    {% load custom_humanize %}
    {{ your_date_variable|custom_naturaltime }}
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 10:52:38