How to display "x days ago" type time using Humanize in Django template?
django, humanize, python
Solution
Django has a built-in template filter `timesince` that offers the same output you mentioned above. The following filter just strips the second part after the comma:
from datetime import datetime, timedelta
from django import template
from django.utils.timesince import timesince
register = template.Library()
@register.filter
def age(value):
now = datetime.now()
try:
difference = now - value
except:
return value
if difference <= timedelta(minutes=1):
return 'just now'
return '%(time)s ago' % {'time': timesince(value).split(', ')[0]}
Problem
When I do this: ``` {% load humanize %} {{ video.pub_date|naturaltime|capfirst }} ``` I get `2 days, 19 hours ago` How can I get just 2 days without the hours. Basically if the video was published in less than a day ago then it should say X hours ago, then it should count in days like X days ago, then in weeks. I just don't want 1 hours 5 minutes ago or 2 days 13 minutes ago. Just the first part. I looked at the humanize docs but couldn't find what I needed.