Формат времени с фильтром - PullRequest
10 голосов
/ 26 июня 2011

Можно ли использовать фильтр {{date|timesince}}, но вместо двух смежных единиц отображается только один?

Например, мой шаблон в настоящее время отображает «18 часов, 16 минут». Как бы заставить его отображать "18 часов"? (Округление здесь не имеет значения.) Спасибо.

Ответы [ 3 ]

25 голосов
/ 26 июня 2011

Я не могу придумать простой встроенный способ сделать это.Вот специальный фильтр, который я иногда находил полезным:

from django import template
from django.template.defaultfilters import stringfilter

register = template.Library()

@register.filter
@stringfilter
def upto(value, delimiter=None):
    return value.split(delimiter)[0]
upto.is_safe = True

Тогда вы можете просто сделать

{{ date|timesince|upto:',' }}
5 голосов
/ 26 июня 2011

Поскольку фильтр timesince не принимает никаких аргументов, вам придется вручную убрать часы с даты.

Вот пользовательский шаблонный фильтр , который вы можете использовать для удаления минут, секунд и микросекунд из вашего объекта datetime:

#this should be at the top of your custom template tags file
from django.template import Library, Node, TemplateSyntaxError
register = Library()

#custom template filter - place this in your custom template tags file
@register.filter
def only_hours(value):
    """
    Filter - removes the minutes, seconds, and milliseconds from a datetime

    Example usage in template:

    {{ my_datetime|only_hours|timesince }}

    This would show the hours in my_datetime without showing the minutes or seconds.
    """
    #replace returns a new object instead of modifying in place
    return value.replace(minute=0, second=0, microsecond=0)

Если вы ранее не использовали пользовательский шаблонный фильтр или тег, вам нужно будет создать каталог в вашем приложении django (т.е. на том же уровне, что и models.py и views.py) с именем templatetags, и создать файл внутри него называется __init__.py (это делает стандартный модуль Python).

Затем создайте внутри него исходный файл Python, например my_tags.py, и вставьте в него пример кода выше. Внутри вашего представления используйте {% load my_tags %}, чтобы получить Django для загрузки ваших тегов, а затем вы можете использовать вышеупомянутый фильтр, как показано в документации выше.

0 голосов
/ 22 июня 2015

Быстрый и грязный способ:

Изменить исходный файл django $ PYTHON_PATH / django / utils / timesince.py @ line51 (django1.7):

result = avoid_wrapping(name % count)
return result  #add this line let timesince return here
if i + 1 < len(TIMESINCE_CHUNKS):
    # Now get the second item
    seconds2, name2 = TIMESINCE_CHUNKS[i + 1]
    count2 = (since - (seconds * count)) // seconds2
    if count2 != 0:
        result += ugettext(', ') + avoid_wrapping(name2 % count2)
return result  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...