2012-09-05 1 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

재미 있군요 ... 똑같은 모습을 보았고 요점을 얻지 못했습니다 ... 하나의 요청에서 두 번 이상 사용 된 것들에 대해 cached_property에 대한 요점이 있습니다 ... – thomasf1

답변

1

Here 당신은 문서에 대한 cached_property를 찾을 수 있습니다.

BaseHandler 클래스는 나중에 자주 호출됩니다. 내 이해는 매번 jinja2.get_jinja2(app=self.app)을 호출하는 오버 헤드를 피하기 위해 이러한 참조는 처음으로 만 평가 된 다음 나중에 여러 번 반환됩니다. 즉,보기가 호출 될 때마다 여러 번 반환됩니다.

코드에서 이런 현상이 발생하는 것을 확인하려면 this 예제를 참조하십시오. 각보기는 동일한 BaseHandler 클래스에서 파생됩니다.