21

djangoテンプレートで投稿のタイムスタンプを表示する必要があります。タイムスタンプは次のようになります。

"timestamp":1337453263939 in milli seconds

タイムスタンプを日時オブジェクトに変換して、ビューにレンダリングできます。テンプレートを介して表示する直接的な方法はありますか?出力は次のようになります。

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

5 に答える 5

93
{% now "U" %}

"U"Unix エポックの日付形式であり、組み込みのdateフィルターでも使用できます。したがって、変数に日付がある場合:

{{ value|date:"U" }}
于 2012-09-17T09:59:43.773 に答える
29

カスタム テンプレート フィルターを使用できます ( 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))
于 2012-05-23T08:07:25.230 に答える
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..
于 2012-05-23T07:41:54.450 に答える