Python中如何去掉Django时间过滤器timesince输出中的逗号?

django 的时间过虑器 timesince .一般是这样:5 小时,16 分钟 , 4 小时,20 分钟 中间那个豆号怎么去掉?

我看 V2EX 的都是 3 小时 7 分钟 , 8 小时 21 分钟 这样的.
这个要重写 django 代码?自已写个过虑器还是在哪里改?
Python中如何去掉Django时间过滤器timesince输出中的逗号?

9 回复

这个东西还是写在浏览器端而不是服务端好点


from django import template
from django.utils.timesince import timesince
from django.utils.timezone import now
import datetime

register = template.Library()

@register.filter
def timesince_without_comma(value):
    """
    自定义时间过滤器,移除timesince输出中的逗号
    例如:"2 days, 4 hours" → "2 days 4 hours"
    """
    if not value:
        return ''
    
    # 使用原生的timesince函数
    time_str = timesince(value, now())
    
    # 移除所有逗号
    return time_str.replace(',', '')

# 使用示例:
# 在模板中:{{ some_datetime|timesince_without_comma }}

使用方法:

  1. 在某个app下创建templatetags文件夹(如果不存在)
  2. templatetags文件夹中创建__init__.py文件
  3. 创建自定义过滤器文件(如custom_filters.py),将上面的代码复制进去
  4. 在模板中加载并使用:
{% load custom_filters %}
{{ post.created_at|timesince_without_comma }}

替代方案: 如果不想创建自定义过滤器,也可以在视图函数中处理:

from django.utils.timesince import timesince

def your_view(request):
    time_str = timesince(some_datetime).replace(',', '')
    # 传递给模板...

核心原理: Django的timesince函数返回的是带逗号的字符串,我们只需要在显示前移除所有逗号即可。

总结:创建自定义过滤器是最干净的解决方案。


不知道他用的是 不是自写的过虑器.

自己定义一个 filter 呗

楼上+1,自定义过滤器不复杂。可行

前端处理吧

这个前端怎么处理? 能给个大体思路不?

传时间给前端 前端用 moment.js 格式化

回到顶部