2012-09-05 12 views
6

Trang webapp2 (http://webapp-improved.appspot.com/api/webapp2_extras/jinja2.html) có hướng dẫn về cách sử dụng webapp2_extras.jinja2 và mã bên dưới.lý do trang trí các phiên bản Jinja2 với @ webapp2.cached_property

Câu hỏi của tôi là: lý do khiến bộ nhớ cache webapp2_extras.jinja2.Jinja2 trả về phiên bản return jinja2.get_jinja2(app=self.app)? Tôi đã kiểm tra mã số @webapp2.cached_property và nhận thấy rằng nó lưu trữ cá thể Jinja2 trong một phiên bản BaseHandler, sẽ bị hủy sau khi yêu cầu, vậy tại sao phải lưu vào bộ nhớ cache? Tôi đã bỏ lỡ một cái gì đó ở đây?

 
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

Hài hước bạn đã hỏi rằng ... chỉ cần có một cái nhìn tại cùng và không thể có được điểm hoặc là ... Có một điểm để cached_property tất nhiên cho những thứ được sử dụng nhiều hơn một lần trong một yêu cầu ... – thomasf1

Trả lời

1

Here bạn có thể tìm tài liệu về cached_property.

Lớp học BaseHandler sau này sẽ được gọi thường xuyên. Sự hiểu biết của tôi là để tránh chi phí gọi số jinja2.get_jinja2(app=self.app) mỗi lần, tham chiếu đó chỉ được đánh giá lần đầu tiên và sau đó được trả lại nhiều lần, tức là mỗi lần xem được gọi.

Để xem điều này xảy ra trong mã, hãy xem ví dụ this, trong đó mỗi chế độ xem có nguồn gốc từ cùng một lớp BaseHandler.

Các vấn đề liên quan