2012-09-05 22 views
6

के साथ Jinja2 उदाहरणों को क्यों सजाने के लिए Webapp2 साइट (http://webapp-improved.appspot.com/api/webapp2_extras/jinja2.html) में webapp2_extras.jinja2 का उपयोग करने के तरीके पर एक ट्यूटोरियल है, और कोड नीचे है।@ webapp2.cached_property

मेरा प्रश्न है: क्यों webapp2_extras.jinja2.Jinja2 उदाहरण कैश return jinja2.get_jinja2(app=self.app) पर वापस कैश करें? मैंने @webapp2.cached_property के कोड की जांच की और पाया कि उदाहरण BaseHandler के उदाहरण में यह कैश करता है, जो अनुरोध के बाद नष्ट हो जाएगा, तो इसे कैश करने के लिए परेशान क्यों करें? क्या मुझसे यहां पर कुछ छूट गया?

 
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

मजेदार आपने यह पूछा है ... बस उस पर एक नज़र डाली थी और बिंदु भी नहीं मिल सकता ... एक अनुरोध में एक से अधिक बार उपयोग की जाने वाली चीज़ों के लिए कैश_प्रोपर्टी का एक बिंदु है ... – thomasf1

उत्तर

1

Here आप दस्तावेज़ के बारे में cached_property पा सकते हैं।

BaseHandler कक्षा को बाद में अक्सर बुलाया जाएगा। मेरी समझ यह है कि प्रत्येक बार jinja2.get_jinja2(app=self.app) पर कॉल करने के ऊपरी हिस्से से बचने के लिए, इस संदर्भ का केवल पहली बार मूल्यांकन किया जाता है, और फिर कई बार बाद में लौटाया जाता है, यानी हर बार एक दृश्य कहा जाता है।

यह कोड में होने के लिए, this उदाहरण देखें, जहां प्रत्येक दृश्य उसी BaseHandler कक्षा से लिया गया है।