2012-09-05 4 views
6

webapp2サイト(http://webapp-improved.appspot.com/api/webapp2_extras/jinja2.html)にはwebapp2_extras.jinja2の使い方に関するチュートリアルがあり、コードは以下のとおりです。@ webapp2.cached_propertyでJinja2インスタンスを飾る理由

質問:webapp2_extras.jinja2.Jinja2インスタンスをキャッシュする理由はreturn jinja2.get_jinja2(app=self.app)ですか?私は@webapp2.cached_propertyのコードをチェックし、BaseHandlerのインスタンスにJinja2インスタンスをキャッシュすることが判明しました。要求の後に破棄されるので、なぜキャッシュするのが嫌ですか?私はここで何かを逃しましたか?

 
import webapp2 

from webapp2_extras import jinja2 

class BaseHandler(webapp2.RequestHandler): 

    @webapp2.cached_property 
    def jinja2(self): 
     # Returns a Jinja2 renderer cached in the app registry. 
     return jinja2.get_jinja2(app=self.app) 

    def render_response(self, _template, **context): 
     # Renders a template and writes the result to the response. 
     rv = self.jinja2.render_template(_template, **context) 
     self.response.write(rv) 
+0

面白そうなことを聞​​いたことがあります...同じことを見ていて、どちらかのポイントを得ることができません... 1つのリクエストで2回以上使用されたもののためのcached_propertyのポイントがあります... – thomasf1

答えて

1

Hereあなたはcached_propertyについてのドキュメントを見つけることができます。

BaseHandlerクラスは後で頻繁に呼び出されます。私の理解では、毎回jinja2.get_jinja2(app=self.app)を呼び出すオーバーヘッドを避けるために、このような参照は最初に評価され、その後何度も返されます。つまり、ビューが呼び出されるたびに返されます。

コードでこれを確認するには、thisの例を参照してください。各ビューは同じBaseHandlerクラスから派生しています。

関連する問題