6

webapp2 サイト ( http://webapp-improved.appspot.com/api/webapp2_extras/jinja2.html ) には、 の使用方法に関するチュートリアルがwebapp2_extras.jinja2あり、コードは以下のとおりです。

私の質問は、なぜwebapp2_extras.jinja2.Jinja2インスタンスの戻り値をキャッシュするのreturn jinja2.get_jinja2(app=self.app)ですか? のコードを確認したところ、 のインスタンスにインスタンスが@webapp2.cached_propertyキャッシュされていることがわかりました。このインスタンスは、リクエスト後に破棄されます。なぜわざわざキャッシュするのでしょうか? ここで何か見逃しましたか?Jinja2BaseHandler

webapp2 のインポート

webapp2_extras から jinja2 をインポート

クラス BaseHandler (webapp2.RequestHandler):

    @webapp2.cached_property
    def jinja2(自己):
        # アプリのレジストリにキャッシュされた Jinja2 レンダラーを返します。
        return jinja2.get_jinja2(app=self.app)

    def render_response(self, _template, **context):
        # テンプレートをレンダリングし、結果をレスポンスに書き込みます。
        rv = self.jinja2.render_template(_template, **context)
        self.response.write(rv)
4

1 に答える 1

1

ここでは、 に関するドキュメントを見つけることができますcached_property

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

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

于 2013-01-06T15:03:02.683 に答える