PySNSの日記の投稿日時表記をUTCからJSTに変更しました。日時計算を複数回実装するのはDRYの原則に反するので、Modelにプロパティーを追加し、そのプロパティーの値を表示するように変更しました。
ソースコード
モデルの拡張
末尾の3行が追加分です。entry_date_in_jstは外からアクセスするとフィールドのように見えますが、実体はありません。
1 2 3 4 5 6 7 8 | class Diary(db.Model): user = db.ReferenceProperty(reference_class = User, collection_name = "diaries") title = db.StringProperty() body = db.TextProperty() entry_date = db.DateTimeProperty(auto_now_add = True) @property def entry_date_in_jst(self): return self.entry_date + datetime.timedelta(hours=9) |
テンプレートの呼び出しをentry_dateからentry_date_in_jstに変更。
変更前
1 2 | <li><a href="/diary?key={{diary.key}}&phpMyAdmin=cfc2644bd9c947213a0141747c2608b0">{{diary.title}}</a> (<a href="/user?key={{diary.user.key}}&phpMyAdmin=cfc2644bd9c947213a0141747c2608b0">{{diary.user.nickname}}</a> | {{diary.entry_date|date:"Y-m-d H:i:s"}})</li> |
変更後
1 2 | <li><a href="/diary?key={{diary.key}}&phpMyAdmin=cfc2644bd9c947213a0141747c2608b0">{{diary.title}}</a> (<a href="/user?key={{diary.user.key}}&phpMyAdmin=cfc2644bd9c947213a0141747c2608b0">{{diary.user.nickname}}</a> | {{diary.entry_date_in_jst|date:"Y-m-d H:i:s"}})</li> |
まとめ
db.Modelにプロパティーとして実装することで、同じ処理を複数個所で実装せずにすんだ。