Как отобразить временную дельту поля 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>