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