/ / Форматиране на филтъра за времето само за показване на минути - Django - django, django-templates, django-template-filters

Форматирайте пъти, за да показвате само минути - Django - django, django-шаблони, django-template-filters

Има ли начин да форматирате timesince филтър в Django за извеждане на стойността само за минути?

Например, {{ comment.timestamp|timesince }} дисплеи 3 days, 4 hours, Бих искал да се покаже 1680 minutes.

Благодаря ви предварително!

Отговори:

0 за отговор № 1

Не, не е възможно да се направи това с вграденото Django timesince филтър. Той има един опционален аргумент, който е дата за сравнение с, така че не е възможно да се определи изходния формат.

Можеш да напишеш своето персонализиран филтър това прави това. Трябва да можете многократно да използвате много от кода в timesince филтър и django.utils.timesince.timesince.


0 за отговор № 2

Съкратена версия на отказване. Само в моя случай години или месеци е необходимо. Този код трябва да бъде във файла appname / templatetags / custom_filters.py, след което да го заредите в шаблон като {% load custom_filters %} и да се използват по същия начин като отсъствието {{ 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