Показывать временную метку в шаблоне django

Мне нужно отобразить временную метку сообщения с шаблоном django. Временная метка будет выглядеть так:

"timestamp":1337453263939 in milli seconds

Я могу преобразовать метку времени в объект datetime и отобразить ее в представлении. Есть ли какой-либо прямой способ отображения через шаблон? Выход должен быть:

print(datetime.datetime.fromtimestamp(1337453263.939))
2012-05-20 00:17:43.939000

Ответ 1

Вы можете использовать настраиваемые фильтры шаблонов (см. https://docs.djangoproject.com/en/dev/howto/custom-template-tags/). В вашем случае это может понравиться:

  • Создать каталог "templatetags" в приложении с представлением, который отображает шаблон.
  • Поместите в этот чистый файл "__init__.py" и "timetags.py" с кодом:

    from django import template
    import datetime
    register = template.Library()
    
    def print_timestamp(timestamp):
        try:
            #assume, that timestamp is given in seconds with decimal point
            ts = float(timestamp)
        except ValueError:
            return None
        return datetime.datetime.fromtimestamp(ts)
    
    register.filter(print_timestamp)
    
  • В шаблоне добавьте

    {% load timetags %}
    
  • Используйте следующий синтаксис в шаблоне:

    {{ timestamp|print_timestamp }}
    

    Где timestamp = 1337453263.939 из вашего примера

Это будет печатать временную метку в локальном формате даты и времени. Если вы хотите настроить вывод, вы можете изменить print_timestamp следующим образом:

import time
def print_timestamp(timestamp):
    ...
    #specify format here
    return time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(ts))

Ответ 2

{% now "U" %}

"U" - формат даты для эпохи Unix, а также может использоваться со встроенным фильтром date. Итак, если у вас есть дата в переменной:

{{ value|date:"U" }}

Ответ 4

Я не думаю, что фильтр даты принимает отметки времени, поэтому, если я не наблюдаю за фильтром, вы можете просто создать его?

# python
from datetime import datetime

# django
from django import template


register = template.Library()

@register.filter("timestamp")
def timestamp(value):
    try:
        return datetime.fromtimestamp(value)
    except AttributeError, e:
        catch errors..

Ответ 5

Просто напишите настраиваемый фильтр, который преобразует вашу строку timestamp в объект datetime. Затем вы можете либо обработать его на что-то читаемое (строку, представляющую ваше время), и вернуть его в свой шаблон, либо просто вернуть объект datetime python и использовать фильтр даты django.

Итак, у вас может быть что-то вроде этого {{timestamp_string | convert_to_datetime | date: 'D d M Y'}}

Подробнее об этой теме: https://docs.djangoproject.com/en/dev/howto/custom-template-tags/