Отображение метки времени в шаблоне django
мне нужно отобразить временную метку сообщения с шаблоном в django. Метка времени будет выглядеть так:
"timestamp":1337453263939 in milli seconds
Я могу преобразовать временную метку в объект datetime и отобразить ее в представлении. Есть ли какой-либо прямой способ отображения через шаблон? Вывод должен быть:
print(datetime.datetime.fromtimestamp(1337453263.939))
2012-05-20 00:17:43.939000
5 ответов
вы можете использовать пользовательские фильтры шаблонов (см. https://docs.djangoproject.com/en/dev/howto/custom-template-tags/). В вашем случае это может выглядеть так:
- создать каталог "templatetags" в приложении с видом, который отображает шаблон.
-
поместите в этот пустой файл dir "__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 }}
где отметка времени = 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))
{% now "U" %}
на "U"
- это формат даты для эпохи Unix, а также может использоваться со встроенным date
. Поэтому, если у вас есть дата в переменной:
{{ value|date:"U" }}
возможно, вы можете использовать фильтр даты: https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#date
Я не думаю, что фильтр даты принимает временные метки, поэтому, если я не контролирую фильтр, вы можете просто создать его?
# 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..
просто напишите пользовательский фильтр, который преобразует строку метки времени в объект datetime. Затем вы можете либо дополнительно обработать его во что-то читаемое (строка, представляющая ваше время) и вернуть его в шаблон, либо просто вернуть объект Python datetime и использовать фильтр даты django.
таким образом, у вас может быть что-то вроде этого {{ timestamp_string|convert_to_datetime|date:'D d M Y' }}
подробнее по этому вопросу на: https://docs.djangoproject.com/en/dev/howto/custom-template-tags/