2013-03-23 88 views
1

我正在做一個網站,使用金字塔,SQLAlchemy的和變色龍... 在view.py我送的SQLAlchemy:SQL鍊金術+金字塔 「請求緩存」

@view_config(route_name='entity_subpage') 
def entity_subpage_view(request): 
    dbsession = DBSession() 
    User = dbsession.query(Users).filter_by(id=0).first() 
    return render_to_response('page.pt', User=User, request=request) 

和變色龍:

<a tal:condition="user.minions.filter_by(dead=0).count() > 1">Prev</a> 
<a tal:condition="user.minions.filter_by(dead=0).count() > 1">Next</a> 
<repeat tal:omit-tag="" tal:repeat="_page user.minions"> 
    <condition tal:omit-tag="" tal:condition="not minion.dead"> 
     <li> 
      ${minion.name} 
     </li> 
    </condition> 
</repeat> 

但SQLAlchemy的 「user.minions.count()」 運行兩次,所以我說這個模型上:

class Users(Base): 
    __tablename__ = 'users' 
    id = Column(Integer, primary_key=True) 
    name = Column(String(convert_unicode=True)) 
    minions = dynamic_loader("Minions", backref="User") 
    _NumFixedMinions = None 

    @property 
    def NumAliveMinions(self): 
     if not self._NumFixedMinions: 
      self._NumFixedMinions = self.minions.filter_by(dead=0).count() 
     return self._NumFixedMinions 

,並開始使用「NumFixedMinions」而不是「.count()」,但是這使得_NumFixedMintions被定義,直到我重新啓動服務器,我錯過了什麼?或者是有什麼辦法只在請求做一個簡單的「緩存」 ..

PS:這不是真正的代碼,它很難知道什麼時候事端將兩倍於網站上使用的模塊化

回答

2

只需撥打count()一次在你的模板:

<tal:links tal:condition="user.minions.filter_by(dead=0).count() > 1"> 
    <a>Prev</a> 
    <a>Next</a> 
</tal> 

有關信息要在請求中使用也許,我會使用一個request property;如果設置reifyTrue那麼它只會計算一次使用時:

def entity_subpage_view(request): 
    dbsession = DBSession() 
    User = dbsession.query(Users).filter_by(id=0).first() 

    def dead_minion_count(request): 
     return User.minions.filter_by(dead=0).count() 

    request.set_property(dead_minion_count, 'dead_minion_count', reify=True) 

    return render_to_response('page.pt', User=User, request=request) 

然後

<tal:links tal:condition="request.dead_minion_count > 1"> 
    <a>Prev</a> 
    <a>Next</a> 
</tal> 
+0

在這種情況下是...但我的網站是模塊化的,用戶可以在同一個頁面內扮演多個小部件和頁面,因此很難知道「count」會被調用多少次,有時可能是分配次數......或者沒有一個 – Joaolvcm 2013-03-23 16:02:53

+0

,這更接近我所需要的,我想要更直接的東西,但如果不得不d像這樣,它可能並不那麼糟糕 – Joaolvcm 2013-03-23 17:24:36