我需要在django模板中显示帖子的时间戳。时间戳就像:
"timestamp":1337453263939 in milli seconds
我可以将时间戳转换为datetime对象并在视图中呈现它。是否有通过模板显示的直接方式? 输出应为:
print(datetime.datetime.fromtimestamp(1337453263.939))
2012-05-20 00:17:43.939000
答案 0 :(得分:75)
答案 1 :(得分:26)
您可以使用自定义模板过滤器(请参阅https://docs.djangoproject.com/en/dev/howto/custom-template-tags/)。 在你的情况下它可能是这样的:
将此代码空白文件“__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))
答案 2 :(得分:1)
答案 3 :(得分:1)
我不认为日期过滤器需要时间戳,所以除非我监督过滤器,否则您只需创建一个过滤器?
# 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..
答案 4 :(得分:0)
只需编写一个自定义过滤器,将时间戳字符串转换为日期时间对象。然后你可以进一步处理它可读的东西(表示你的时间的字符串)并将它返回到你的模板或只返回一个python datetime对象并使用django的日期过滤器。
所以你可以有这样的东西{{timestamp_string | convert_to_datetime | date:'D d M Y'}}
有关此主题的更多信息,请访问:https://docs.djangoproject.com/en/dev/howto/custom-template-tags/