2012-05-23 42 views
13

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

"timestamp":1337453263939 in milli seconds 

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

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

答えて

20

あなたはhttps://docs.djangoproject.com/en/dev/howto/custom-template-tags/を参照してください(カスタムテンプレートフィルタを使用することができます)。 あなたの場合は次のようになります:

  1. テンプレートをレンダリングするビューのアプリケーションで、「templatetags」ディレクトリを作成します。このDIR空のファイル "__init__.py" に入れ
  2. とコードで "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

これは、ローカルの日付と時刻の形式でタイムスタンプを出力します。

import time 
def print_timestamp(timestamp): 
    ... 
    #specify format here 
    return time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(ts)) 
+0

おかげで多くの茎、それは働いた:) – funnyguy

+0

をこれは、DjangoのDRY原則に準拠していない、@frnhrの答えは、この@tgdn – tgdn

+1

を行い、OPの質問に答えますfrnhrの答えはしません。 (私は逆の問題を解決します。) – moooeeeep

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.. 
0

タイムスタンプ文字列をdatetimeオブジェクトに変換するカスタムフィルタを作成するだけです。次に、それをさらに読み込み可能なもの(あなたの時間を表す文字列)に処理し、それをテンプレートに返すか、あるいはPython datetimeオブジェクトを返し、djangoの日付フィルタを使用することができます。

ですから、このようなものかもしれない{{timestamp_string | convert_to_datetime |日付: 'D D MY'}}で、このテーマに関する

もっと:https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

60
{% now "U" %} 

"U"はUnixエポックの日付形式であり、またdateフィルターに内蔵して使用することができます:あなたは、出力をカスタマイズしたい場合は、 あなたは次のようにprint_timestampを変更することができます。あなたは変数に日付を持っているのであれば、:

{{ value|date:"U" }} 
+3

は答えることができました、作品と余分なコーディングの必要はありません。 –

+0

@jeanそれは4年前に働いた... :) – frnhr

+0

申し訳ありませんが、ドキュメントの読み込みが遅すぎるので、私は最初にそれを検索しませんでした。しかし、これは私のためには機能しません。 {{i.createTime | date: "U"}}、htmlは何も表示しません。 {{i.createTime}}のままにしておくと、番号 – jean

関連する問題