【问题标题】:why decorate Jinja2 instances with @webapp2.cached_property为什么用 @webapp2.cached_property 装饰 Jinja2 实例
【发布时间】:2012-08-30 09:43:45
【问题描述】:

webapp2网站(http://webapp-improved.appspot.com/api/webapp2_extras/jinja2.html)有一个webapp2_extras.jinja2的使用教程,代码如下。

我的问题是:为什么要缓存return jinja2.get_jinja2(app=self.app) 返回的webapp2_extras.jinja2.Jinja2 实例?我查看了@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)

【问题讨论】:

  • 你问过这个问题很有趣......只是看了看同样的东西,也不能明白这一点...... cached_property 当然对于在一个请求...

标签: caching properties jinja2 webapp2


【解决方案1】:

Here你可以找到关于cached_property的文档。

BaseHandler 类将在以后经常调用。我的理解是,为了避免每次调用jinja2.get_jinja2(app=self.app) 的开销,此类引用仅在第一次评估,然后多次返回,即每次调用视图时。

要在代码中看到这种情况,请参阅 this 示例,其中每个视图都派生自同一个 BaseHandler 类。

【讨论】:

    猜你喜欢
    • 2012-07-11
    • 2018-09-01
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    • 2019-02-03
    相关资源
    最近更新 更多