使用带有DjangoTables2的datetime.utcnow()render_FOO

时间:2012-12-03 09:36:37

标签: python django python-2.7 django-1.4 django-tables2

我正在尝试使用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'只为表更新一次。实现这一目标的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

尝试在表的__init__方法中设置当前时间。然后,每次启动表时都会设置self.current_Time,而不是在定义表时设置。{/ p>

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

答案 1 :(得分:-1)

current_Time是您的类中的一个字段,在您的类deffinition被读入时安装。在最初定义类时会发生这种情况。在您的情况下,这发生在服务器启动时。 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。