0

データベースにショップのリストを照会しています。このリストはすべてのページで再利用され、実際には変更されないため、memcache に保存したいと考えています。コードは私には非常に単純に見えますが、次のエラーが表示されます:

Traceback (most recent call last):
File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.2\webapp2.py", line 1546, in __call__
return response(environ, start_response)
TypeError: 'Query' object is not callable

私のコードは次のとおりです。

    shops = memcache.get('shops')
    if shops is not None:
        return shops
    else:
        shops =  Shop.all().filter('active = ', True).order('abbrev')
        memcache.set('shops', shops)
        return shops

どんな提案でも大歓迎です。

アップデート

この出力をどのように使用するかを説明すると役立つかもしれません。次に、アクティブなテンプレートで Django を使用してこのアクションの結果を呼び出し、{{ for shop in shop }} を使用します。memchache を設定した後、「shops」変数を再度宣言する必要があるのではないでしょうか??

UPDATE2

次に、変数は次のようにテンプレートに渡されます。

    template_values = {
      'shops': shops,
    }
    self.response.out.write(template.render('templates/home.html', template_values))
4

2 に答える 2

3

実際のクエリ オブジェクトをキャッシュする代わりに、以下を使用してクエリの結果をキャッシュします。

# this will cache the first 50 results
memcache.set('shops', shops.fetch(50)) 

また

# this will cache all (not recommended if your set is very big)
memcache.set('shops', list(shops)) 

余分なものは取り除いて、お店で

template_values = {
  'shops': shops
}
self.response.out.write(template.render('templates/home.html', template_values))
于 2013-02-25T19:17:54.603 に答える
0

問題は「返品ショップ」コールから来ているようですが、正直なところ、その付加価値はわかりません。以下のようにコードを書き直すと、エラーはなくなりました。memcache が実際に機能しているかどうかを確認する方法はありますか?

shops = memcache.get('shops')
    if shops is not None:
        shops = memcache.get('shops')
    else:
        allshops =  Shop.all().filter('active = ', True).order('abbrev')
        memcache.set('shops', list(allshops))
        shops = memcache.get('shops')
于 2013-02-25T20:39:58.257 に答える