ピラミッド、sqlalchemy、chameleon を使用して Web サイトを作成しています... view.py で sqlalchemy を送信します。
@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()" は 2 回実行されるため、モデルにこれを追加しました。
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
「.count()」の代わりに「NumFixedMinions」の使用を開始しましたが、これにより、サーバーを再起動するまで_NumFixedMintionsが定義されました。何か不足していますか? または、リクエスト中にのみ単純な「キャッシュ」を作成する方法はありますか..
追伸:これは実際のコードではありません。ウェブサイトがモジュール化されているため、いつ何かが 2 回使用されるかを知るのは困難です。