Django создаст шаблон фильтра для приятного времяпрепровождения - PullRequest
6 голосов
/ 01 июня 2011

Я знаю, что есть timesince фильтр.

Но я хочу что-то, что возвращает это:

  • всего несколько секунд назад
  • X минут назад
  • X часов назад
  • на $ day_name
  • X недель назад
  • X месяцев назад

Примеры:

  • всего несколько секунд назад
  • 37 минут назад
  • 2 часа назад
  • вчера
  • в четверг
  • 1 неделя назад
  • 7 месяцев назад

Как мне реализовать что-то подобное?

Ответы [ 2 ]

14 голосов
/ 01 июня 2011

Не уверен, что все галочки отмечены галочкой, но есть тег naturaltime в тегах шаблона django.contrib.humanize, который должен это делать:

https://docs.djangoproject.com/en/dev/ref/contrib/humanize/#naturaltime

settings.py

INSTALLED_APPS = {
    ...
    'django.contrib.humanize',
}

template.html

{% load humanize %}
{{ model.timefield|naturaltime }}
4 голосов
/ 01 июня 2011

Редактировать: Если вы используете недавнюю проверку SVN Джанго (пост 1.3), см. Ответ Pastylegs.В противном случае, вот что вы можете сделать:

Я использую repoze.timeago для этой цели.Код довольно прост, поэтому вы можете настроить его при необходимости.

Вот пользовательский фильтр Django с именем elapsed, который я создал и который использует repoze.timeago.

import datetime
from django import template
import repoze.timeago

register = template.Library()

# If you aren't using UTC time everywhere, this line can be used
# to customize repoze.timeago:
repoze.timeago._NOW = datetime.datetime.now

@register.filter(name='elapsed')
def elapsed(timestamp):
    """
    This filter accepts a datetime and computes an elapsed time from "now".
    The elapsed time is displayed as a "humanized" string.
    Examples:
        1 minute ago
        5 minutes ago
        1 hour ago
        10 hours ago
        1 day ago
        7 days ago

    """
    return repoze.timeago.get_elapsed(timestamp)
elapsed.is_safe = True
...