Как конвертировать Unix Timestamp в целое число в удобочитаемый формат человека в шаблоне Django? - PullRequest
6 голосов
/ 29 января 2012

Я храню дату в виде целочисленного поля в моей базе данных и называю его меткой времени. Когда я отображал его в шаблоне, я пытался использовать {{ timestamp | date:"D d M Y" }}, однако для меня это ничего не выводило.

Я сделал что-то не так?

Edit: Извините за опечатку, я поставил дату: вместо даты = в моем коде. Однако, так как отметка времени была целочисленным полем, я должен преобразовать это в datetime прежде, чем сделать это? Могу ли я сделать это в самом шаблоне? Поскольку эта строка кода находится в середине итерации массива объекта в шаблоне.

Ответы [ 3 ]

2 голосов
/ 05 февраля 2013

Вам необходимо создать собственный фильтр тегов шаблона. Я сделал это для вас: просто убедитесь, что у вас есть папка templatetags в каталоге приложения , а затем создайте пустой файл __init__.py в каталоге. Также сохраните код ниже в каталоге templatetag как timestamp_to_time.py. Также убедитесь, что приложение, содержащее этот каталог templatetag, находится в переменной INSTALLED_APPS settings.

from django import template    
register = template.Library()    

@register.filter('timestamp_to_time')
def convert_timestamp_to_time(timestamp):
    import time
    return datetime.date.fromtimestamp(int(timestamp))

В вашем шаблоне вы можете использовать фильтр следующим образом:

{{ value|timestamp_to_time|date:"jS N, Y" }} 

{# замените значение на значение метки времени, а затем отформатируйте нужное время #}

Обязательно загрузите фильтр шаблона тега в шаблон с помощью

{% load timestamp_to_time %}

прежде чем пытаться использовать фильтр

2 голосов
/ 29 января 2012
{{ timestamp|date:"D d M Y" }}

"="! = ":";)

EDIT:

Если у вас есть доступ к представлению, я бы предложил посылать дату в шаблон в виде объекта datetime, а не целого числа.

Из документации: {{value | date: "D d M Y"}} Если значение является объектом даты и времени (например, результат datetime.datetime.now ()), результат будет Строка «Ср 09 Янв 2008».

Вот ссылка на документацию по функциям даты: Django | Встроенные шаблоны-теги-и-фильтры | Дата

Вы также пытались распечатать только целое число, чтобы увидеть, действительно ли в нем правильное значение?

1 голос
/ 29 января 2012

Для работы со встроенным фильтром даты в Django вы должны использовать DateField или DateTimeField. Обратите внимание, что вы можете легко преобразовать метку времени в python datetime , который является форматом, используемым DateField.

Также проверьте документы на правильный синтаксис :

{{ value|date:"D d M Y" }}
...