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”只更新一次。实现这一目标的最佳方法是什么?

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 是你的类上的一个字段,在读入你的类定义时安装。这在你的类最初定义时发生一次。在您的情况下,这发生在服务器启动时。的值在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 

这样,每次调用 render_published 方法时都会填充 current_Time。

于 2012-12-03T10:18:12.883 回答