Как можно реализовать отображение кол-во времени / дней после публикации поста?
Есть такой код:
{% block content %}
<div class="block-news smooth-onset-1s">
<div class="list-news">
{% if post %}
{% for news in post %}
<div class="content-news">
<p class="news-info">
<span class="news-creator">{{ news.creator }}</span>
<span class="news-time">
{{ news.time }}
</span>
</p>
<h2><a href="{% url 'post_detail' pk=news.id %}" class="title-link">{{ news.title }}</a></h2>
<p>{{ news.content|linebreaks }}</p>
{% if news.image %}
<img src="{{ news.image.url }}">
{% else %}
{% endif %}
<br>
<a href="" class="scrollTop">Наверх</a>
</div>
{% endfor %}
{% endif %}
</div>
</div>
{% endblock content %}
Как можно сделать так, чтобы вместо строки с news.time было кол-во дней с момента публикации? По типу: 7 дней назад, 2 часа назад, 14:56 (если дата публикации совпадает с сегодняшней датой)
Заранее спасибо, готов дополнить вопрос
Доп.
# models.py
from django.db import models
from django.utils.translation import gettext as _
from datetime import datetime, timedelta
def default_start_time():
now = datetime.now()
start = now.replace(hour=22, minute=0, second=0, microsecond=0)
return start if start > now else start + timedelta(days=1)
class Post(models.Model):
creator = models.CharField('Автор', max_length=50)
title = models.CharField('Заголовок', max_length=50)
content = models.TextField('Содержимое')
date = models.DateField(_('Дата'), default=datetime.now, blank=True)
time = models.TimeField('Время', default=default_start_time)
image = models.ImageField(upload_to='images/', blank=True)
def __str__(self):
return self.title
class Meta:
verbose_name = 'Новости'
verbose_name_plural = 'Новости'
Не надо помещать никакую логику в тимплейты, это другой слой, который должен отвечать только за отрисовку данных. Самый правильный способ, как по мне, сделать аннотацию внутри кверисета, которая будет считать timedelta между текущей датой и post.time. И в тимплейте обращаться к этому аннотированному полю.