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发现它把Jinja2实例缓存在了一个 的实例中BaseHandler,请求后会被销毁,为什么还要缓存呢?我在这里错过了什么吗?

导入 webapp2

从 webapp2_extras 导入 jinja2

类 BaseHandler(webapp2.RequestHandler):

    @webapp2.cached_property
    def jinja2(自我):
        # 返回缓存在应用注册表中的 Jinja2 渲染器。
        返回 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 回答