Есть ли способ отформатировать фильтр timesince
в Django, чтобы выводить значение только в минутах?
Например, {{ comment.timestamp|timesince }}
отображает 3 days, 4 hours
. Я хотел бы, чтобы он отображал 1680 minutes
.
Заранее спасибо!
Есть ли способ отформатировать фильтр timesince
в Django, чтобы выводить значение только в минутах?
Например, {{ comment.timestamp|timesince }}
отображает 3 days, 4 hours
. Я хотел бы, чтобы он отображал 1680 minutes
.
Заранее спасибо!
Сокращенная версия от timesince. В моем случае нужно всего годы или месяцы. Этот код должен быть в вашем файле appname/templatetags/custom_filters.py, затем вы загружаете его в шаблон как {% load custom_filters %}
и используете так же, как timesince {{ comment.timestamp|yearssince }}
Итак, вот ваш custom_filters.py
from __future__ import unicode_literals
import datetime
from django import template
from django.utils.html import avoid_wrapping
from django.utils.timezone import is_aware, utc
from django.utils.translation import ugettext, ungettext_lazy
register = template.Library()
TIMESINCE_CHUNKS = (
(60 * 60 * 24 * 365, ungettext_lazy('%d year', '%d years')),
(60 * 60 * 24 * 30, ungettext_lazy('%d month', '%d months')),
)
@register.filter
def yearssince(d, now=None):
# Convert datetime.date to datetime.datetime for comparison.
if not isinstance(d, datetime.datetime):
d = datetime.datetime(d.year, d.month, d.day)
if now and not isinstance(now, datetime.datetime):
now = datetime.datetime(now.year, now.month, now.day)
if not now:
now = datetime.datetime.now(utc if is_aware(d) else None)
delta = now - d
# ignore microseconds
since = delta.days * 24 * 60 * 60 + delta.seconds
if since <= 0:
# d is in the future compared to now, stop processing.
return avoid_wrapping(ugettext('0 minutes'))
for i, (seconds, name) in enumerate(TIMESINCE_CHUNKS):
count = since // seconds
if count != 0:
break
result = avoid_wrapping(name % count)
return result
__init__.py
в папку тегов шаблона. 2. Перезапустите сервер при внесении изменений в пользовательские теги.
- person DeltaG; 19.03.2019
Нет, это невозможно сделать с помощью встроенного в Django timesince
фильтр. У него есть один необязательный аргумент, который представляет собой дату для сравнения, поэтому невозможно указать выходной формат.
Вы можете написать свой собственный пользовательский фильтр, который делает это. Вы должны иметь возможность повторно использовать большую часть кода в timesince
фильтр и django.utils.timesince.timesince
< /а>.