Показывать временную метку в шаблоне 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" }}
Ответ 3
Возможно, вы можете использовать фильтр даты:
https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#date
Ответ 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/