Как отобразить поле даты и времени в определенном формате - PullRequest
0 голосов
/ 13 октября 2018

У меня есть столбец поля datetime, в котором я использую шаблон детального просмотра.Я показываю это на своей HTML-странице как: {{ post.created_at }}, а вывод: July 15, 2018, 7:03 p.m Это более многословно, чем мне нужно.

Мне бы хотелось следующее:

  • Если я разместил сообщение 59 минут назад, оно должно отображаться как 59m
  • Если я разместил сообщение 23 часаназад, он должен отображаться как 23h
  • Если я разместил сообщение 6 дней назад, он должен отображаться как 6d
  • Теперь все, что превышает время недели, должно отображаться как день, месяц год.В приведенном выше примере это должно быть: 15 Jul 18 без времени.

Есть ли способ сделать это на HTML-странице с помощью Jinja?

1 Ответ

0 голосов
/ 14 октября 2018

Вы можете использовать пользовательский фильтр для этого.Я использую один, как следующий.Он не форматируется точно в соответствии с вашими требованиями, но вы получите идею:

{{ value|format_date_human(locale='en') }}

def format_date_human(to_format, locale='en', timezoneinfo='Asia/Calcutta'):
    tzinfo = timezone(timezoneinfo)
    now = datetime.now()
    #logging.info('delta: %s', str((now - to_format).days))
    #logging.info('delta2: %s', str((datetime.date(now)-datetime.date(to_format)).days))

    if datetime.date(to_format) == datetime.date(now):
        date_str = _('Today')
    elif (now - to_format).days == 1:
        date_str = _('Yesterday')
    else:
        month = MONTHS[to_format.month - 1]
        date_str = '{0} {1}'.format(to_format.day, _(month))
    time_str = format_time(to_format, 'H:mm', tzinfo=tzinfo, locale=locale)
    return "{0}".format(date_str, time_str)
...