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$
|
$Id$
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
from zope.app.pagetemplate import ViewPageTemplateFile
|
||||||
|
|
||||||
|
from cybertools.util.cache import cache
|
||||||
|
|
||||||
|
|
||||||
class RendererFactory(object):
|
class RendererFactory(object):
|
||||||
""" Provider for ZPT macros.
|
""" Provider for ZPT macros.
|
||||||
|
@ -58,3 +62,23 @@ class Renderer(object):
|
||||||
def __call__(self):
|
def __call__(self):
|
||||||
return self.template.macros[self.name]
|
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.event import notify
|
||||||
from zope.publisher.interfaces.browser import IBrowserSkinType
|
from zope.publisher.interfaces.browser import IBrowserSkinType
|
||||||
|
|
||||||
|
from cybertools.browser.renderer import CachableRenderer
|
||||||
|
|
||||||
|
|
||||||
mainTemplate = ViewPageTemplateFile('main.pt')
|
mainTemplate = ViewPageTemplateFile('main.pt')
|
||||||
popupTemplate = ViewPageTemplateFile('liquid/popup.pt')
|
popupTemplate = ViewPageTemplateFile('liquid/popup.pt')
|
||||||
|
@ -67,6 +69,8 @@ class GenericView(object):
|
||||||
|
|
||||||
template = macro = menu = skin = None
|
template = macro = menu = skin = None
|
||||||
|
|
||||||
|
cachableRendererFactory = CachableRenderer
|
||||||
|
|
||||||
_updated = False
|
_updated = False
|
||||||
|
|
||||||
def setController(self, controller):
|
def setController(self, controller):
|
||||||
|
@ -145,3 +149,6 @@ class GenericView(object):
|
||||||
applySkin(self.request, skin)
|
applySkin(self.request, skin)
|
||||||
self.skin = 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