Форматировать фильтр времени, чтобы отображались только минуты — Django

Есть ли способ отформатировать фильтр timesince в Django, чтобы выводить значение только в минутах?

Например, {{ comment.timestamp|timesince }} отображает 3 days, 4 hours. Я хотел бы, чтобы он отображал 1680 minutes.

Заранее спасибо!


person jape    schedule 27.08.2015    source источник
comment
Невозможно сделать без написания пользовательского фильтра.   -  person xyres    schedule 27.08.2015


Ответы (2)


Сокращенная версия от 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
person horbor    schedule 18.03.2016
comment
Это хорошее решение. Несколько вещей, которые нужно помнить о пользовательских фильтрах: 1. Включите __init__.py в папку тегов шаблона. 2. Перезапустите сервер при внесении изменений в пользовательские теги. - person DeltaG; 19.03.2019