2013-01-16 28 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