2012-09-05 7 views
6

Die Website webapp2 (http://webapp-improved.appspot.com/api/webapp2_extras/jinja2.html) hat eine Anleitung zur Verwendung webapp2_extras.jinja2, und der Code ist unten.Warum dekorieren Jinja2-Instanzen mit @ webapp2.cached_property

Meine Frage ist: Warum cache die webapp2_extras.jinja2.Jinja2 Instanz Rückgabe von return jinja2.get_jinja2(app=self.app)? Ich überprüfte den Code und fand, dass es die Jinja2 Instanz in einer Instanz von BaseHandler zwischenspeichert, die nach der Anfrage zerstört wird, also warum stören, es zu cachen? Hab ich hier etwas verpasst?

 
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

Lustig du hast gefragt, dass ... nur einen Blick auf die gleiche und nicht den Punkt auch nicht bekommen ... Es gibt einen Punkt auf cached_property natürlich für Dinge, die mehr als einmal in einer Anfrage verwendet ... – thomasf1

Antwort

1

Here können Sie die Dokumentation über cached_property finden.

Die BaseHandler Klasse wird später oft aufgerufen werden. Mein Verständnis ist, dass, um den Overhead des Aufrufs von jinja2.get_jinja2(app=self.app) jedes Mal zu vermeiden, eine solche Referenz nur das erste Mal ausgewertet wird und dann viele Male später zurückgegeben wird, d. H. Jedes Mal, wenn eine Ansicht aufgerufen wird.

Um dies im Code zu sehen, siehe this Beispiel, wo jede Ansicht von der gleichen BaseHandler Klasse abgeleitet ist.

Verwandte Themen