0

投稿の年齢(時間単位)をdjangotables2で表示しようとしています。私のコードを以下に示します

class PostTable(tables.Table):
    current_Time = datetime.utcnow().replace(tzinfo=utc)
    published= tables.Column()
    def render_published(self, value,record):
        tdelta = self.current_Time - record.published
        #Some logic 

このコードでは、「current_Time」はApacheサーバーが再起動したときにのみ更新されます。コードをに変更した場合

  tdelta = datetime.utcnow().replace(tzinfo=utc) - record.published

それは機能しますが、効率的ではないすべての行に対してdatetime.utcnow()を計算します。'current_Time'をテーブルに対して1回だけ更新したい。それを達成するための最良の方法は何ですか?

4

2 に答える 2

1

テーブルの__init__メソッドで現在の時刻を設定してみてください。その後self.current_Time、テーブルが定義されるときではなく、テーブルが開始されるたびに設定されます。

class PostTable(tables.Table):
    def __init__(self, *args, **kwargs):
        super(PostTable, self).__init__(*args, **kwargs)
        self.current_Time =  datetime.utcnow().replace(tzinfo=utc)

    def render_published(self, value,record):
        tdelta = self.current_Time - record.published
于 2012-12-03T10:24:02.587 に答える
-1

current_Time は、クラス定義が読み込まれるときにインストールされるクラスのフィールドです。これは、クラスが最初に定義されたときに1回発生します。あなたの場合、これはサーバーの起動時に発生します。の値current_Timeは、一度だけ設定されます。

あなたはに移動current_Time = datetime.utcnow().replace(tzinfo=utc)したいと思うでしょうdef render_published(self, value,record):

class PostTable(tables.Table):
    published= tables.Column()
    def render_published(self, value,record):
        current_Time = datetime.utcnow().replace(tzinfo=utc)
        tdelta = current_Time - record.published
        #Some logic 

このように、current_Timeは、render_publishedメソッドが呼び出されるたびに入力されます。

于 2012-12-03T10:18:12.883 に答える