provide macro caching for standard views (was implemented for composer.layout only)
This commit is contained in:
parent
383ea58e2f
commit
0118ea71d8
3 changed files with 37 additions and 0 deletions
6
browser/renderer.pt
Normal file
6
browser/renderer.pt
Normal file
|
@ -0,0 +1,6 @@
|
|||
<!-- $Id$ -->
|
||||
|
||||
<tal:renderer define="view nocall:options/view;
|
||||
macro options/macro">
|
||||
<metal:content use-macro="macro" />
|
||||
</tal:renderer>
|
|
@ -22,6 +22,10 @@ Use ZPT macros as layout renderers.
|
|||
$Id$
|
||||
"""
|
||||
|
||||
from zope.app.pagetemplate import ViewPageTemplateFile
|
||||
|
||||
from cybertools.util.cache import cache
|
||||
|
||||
|
||||
class RendererFactory(object):
|
||||
""" Provider for ZPT macros.
|
||||
|
@ -58,3 +62,23 @@ class Renderer(object):
|
|||
def __call__(self):
|
||||
return self.template.macros[self.name]
|
||||
|
||||
|
||||
rendererTemplate = ViewPageTemplateFile('renderer.pt')
|
||||
|
||||
class CachableRenderer(object):
|
||||
|
||||
lifetime = 3 * 3600
|
||||
#lifetime = 24 * 3600
|
||||
|
||||
def __init__(self, view, renderer):
|
||||
self.view = view
|
||||
self.renderer = renderer
|
||||
|
||||
def getRenderMacroId(self, *args):
|
||||
return 'renderer.' + '.'.join(args)
|
||||
|
||||
@cache(getRenderMacroId, lifetime=lifetime)
|
||||
def renderMacro(self, *args):
|
||||
return rendererTemplate(self.view, view=self.view, macro=self.renderer)
|
||||
|
||||
|
||||
|
|
|
@ -30,6 +30,8 @@ from zope import component
|
|||
from zope.event import notify
|
||||
from zope.publisher.interfaces.browser import IBrowserSkinType
|
||||
|
||||
from cybertools.browser.renderer import CachableRenderer
|
||||
|
||||
|
||||
mainTemplate = ViewPageTemplateFile('main.pt')
|
||||
popupTemplate = ViewPageTemplateFile('liquid/popup.pt')
|
||||
|
@ -67,6 +69,8 @@ class GenericView(object):
|
|||
|
||||
template = macro = menu = skin = None
|
||||
|
||||
cachableRendererFactory = CachableRenderer
|
||||
|
||||
_updated = False
|
||||
|
||||
def setController(self, controller):
|
||||
|
@ -145,3 +149,6 @@ class GenericView(object):
|
|||
applySkin(self.request, skin)
|
||||
self.skin = skin
|
||||
|
||||
def cachedRenderer(self, baseRenderer, *args):
|
||||
cr = self.cachableRendererFactory(self, baseRenderer)
|
||||
return cr.renderMacro(*args)
|
||||
|
|
Loading…
Add table
Reference in a new issue