Как отобразить временную дельту поля Django datetime по сравнению с now?

У меня есть модель Vote, содержащая DateTimeField, которая возвращает
дату в шаблоне следующим образом: Sept. 22, 2021, 10:02 a.m.

# Model

class Vote(models.Model):

    created_on = models.DateTimeField(auto_now_add=True)

Теперь я хочу отобразить дельту времени между настоящим моментом и временем, хранящимся в Модели, в шаблоне:

# Template

<div> voted {{ vote.created_on|datetime_delta }} ago</div>

Следует сделать, например: voted 16 hours ago или voted 3 days ago

Насколько я знаю, в Django нет встроенного решения для этого, поэтому я попытался создать индивидуальный фильтр шаблонов:

# Template filter

from django import template
import datetime

register = template.Library()

# Output Django:         Sept. 22, 2021, 10:02 a.m.
# Output datetime.now(): 2021-09-22 12:56:57.268152

@register.filter(name='datetime_delta')
def datetime_delta(past_datetime):
    datetime_object = datetime.datetime.now().strftime("%bt. %d, %Y, %H:%M %p")
    print(datetime_object) # prints Sept. 22, 2021, 13:20 PM

Так что я как-то пытался создать два объекта времени в одной структуре для вычисления дельты времени, но не могу заставить их соответствовать 1:1. В любом случае, я не знаю, может ли это быть рабочим подходом, и также я не знаю, есть ли более умные решения для этого?

В Django уже есть |naturaltime фильтр шаблонов [Django-doc]. Вы можете использовать его с:

# Template

{% load humanize %}

<div> voted {{ vote.created_on|naturaltime }}</div>
Вернуться на верх