【问题标题】:Display timestamp in django template在 Django 模板中显示时间戳
【发布时间】:2012-05-29 17:23:18
【问题描述】:

我需要在 django 模板中显示帖子的时间戳。时间戳是这样的:

"timestamp":1337453263939 in milli seconds

我可以将时间戳转换为日期时间对象并在视图中呈现它。有没有直接通过模板显示的方式? 输出应该是:

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

【问题讨论】:

    标签: django templates date timestamp


    【解决方案1】:
    {% now "U" %}
    

    "U" 是 Unix 纪元的日期格式,也可以与内置的 date 过滤器一起使用。因此,如果您在变量中有日期:

    {{ value|date:"U" }}
    

    【讨论】:

    • 抱歉,doc加载太慢了,所以一开始没有搜索。但这对我不起作用,{{ i.createTime|date:"U" }},html 什么也没显示。如果只保留 {{ i.createTime }},它会显示数字
    • 根据文档它应该仍然有效。你确定你的I.createTime 是一个DateTime 实例而不仅仅是一个整数吗?
    • 是的......我的 createTime 是 int,它是一个 unix 时间戳。但是有问题的“时间戳”是输入(变量)而不是输出(显示)。首先,我使用您的解决方案,因为它简单但不起作用,经过一个小时的努力,我意识到了这一点。接受的答案是正确的
    • 当心! OP 要求自纪元以来的毫秒数,而 "U" 格式提供自纪元以来的 "U"的结果需要乘以1000。
    • 这回答了一个不同的问题。 OP 询问如何将时间戳呈现为日期/时间字符串,而不是如何将日期时间对象呈现为时间戳
    【解决方案2】:

    您可以使用自定义模板过滤器(请参阅https://docs.djangoproject.com/en/dev/howto/custom-template-tags/)。 在你的情况下,它可能是这样的:

    1. 在具有视图的应用程序中创建目录“templatetags”,以呈现模板。
    2. 将空白文件“__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)
      
    3. 在您的模板中,添加

      {% load timetags %}
      
    4. 在模板中使用以下语法:

      {{ 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))
    

    【讨论】:

    • 这不符合 Django 的 DRY 原则,@frnhr 的回答是
    • @tgdn 这回答了 OP 的问题,frnhr 的回答没有。 (我解决了逆问题。)
    【解决方案3】:

    【讨论】:

      【解决方案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】:

        只需编写一个自定义过滤器,将您的时间戳字符串转换为日期时间对象。然后,您可以进一步将其处理为可读的内容(表示您的时间的字符串)并将其返回到您的模板,或者只返回一个 python 日期时间对象并使用 django 的日期过滤器。

        所以你可以有这样的东西 {{ timestamp_string|convert_to_datetime|date:'D d M Y' }}

        有关此主题的更多信息,请访问:https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-10-03
          • 2018-12-28
          • 2019-09-20
          • 1970-01-01
          • 1970-01-01
          • 2019-12-22
          • 1970-01-01
          • 2014-06-08
          相关资源
          最近更新 更多