2013-01-16 30 views
0

我在models.py是否在模板Django的缓存功能结果

class Team(models.Model): 
    x = models.IntegerField() 
    y = models.IntegerField() 

    a = models.IntegerField() 
    b = models.IntegerField() 

    def get_stat(self): 
     return { 
      'xy': self.x + self.y, 
      'ab': self.a + self.b 
     } 

    stat = property(get_stat) 

team.html我:

xy stat: {{ team.stat.xy }} 
ab stat: {{ team.stat.ab }} 

的问题是:“做Django的执行get_stat功能,每次我打电话stat或者缓存结果?“

回答

1

不,property不会缓存任何结果。

如果你想让它的缓存为重重复访问,典型的设计模式是:

def get_stat(self): 
    if not hasattr(self, '__get_stat'): 
     self.__get_stat = { 
      'xy': self.x + self.y, 
      'ab': self.a + self.b 
     } 
    return self.__get_stat 

当然,如果是做一些奇怪的就像对付实例是在地方修改这不起作用,但没有提交给数据库。我相信99%的用途涉及DB-> Object-> Action

+0

非常感谢您 – imkost

+0

@imkost,没有问题,但整数加法是不贵:d –

+0

@娱记,富田,富田,整数加法就是使例子更容易理解 – imkost

1

这不是一个具体的答案,因为你已经知道它没有被缓存,但是一些一般性的建议。通常,判断这样的东西是否被缓存(或者调用一些随机代码)的方法是在那里添加一些日志记录或调试语句。

def get_stat(self): 
    # logging or debugging statement here, e.g. import ipdb; ipdb.set_trace() 
    # for ipdb, you need to pip install ipdb 
    return { 
     'xy': self.x + self.y, 
     'ab': self.a + self.b 
    } 

您也可以使用这个在Django自己的代码,看到的是被服务的页面时所采取的执行路径。

+0

谢谢。有用的建议 – imkost