Łukasz Łakomy napisał(a):
Hi all
My use case:
Create content type 'Portlet' that could have TAL as its content and when
watched in browser TAL should be redered. My code is below.
class PortletView:
def renderText(self):
portlet = IPortlet(self.context)
format = portlet.format
if format in ('HTML', 'Plain'):
return portlet.getText()
elif format == 'Structured':
struct = structurize(portlet.getText())
doc = DocumentWithImages()(struct)
output = HTMLWithImages()(doc, level=1)
return output
elif format == 'Page Template':
page_template = PageTemplate()
page_template.write(portlet.getText())
output = page_template()
return output
But there is a problem. When I define a variable in template and call it its
ok. But I cannot call 'context' variable (for example <div
tal:content="context/title"/>). This is my traceback.
Traceback (most recent call last):
....
Apply the snippet to your needs (provide proper 'context', etc.).
Powodzenia ;)
If anyone knows simpler solution please share.
Pawel
--------------------------------------------
from TAL.TALInterpreter import TALInterpreter
from Products.PageTemplates.Expressions import getEngine
from Products.PageTemplates.PageTemplate import PageTemplate
from cStringIO import StringIO
data = {
'test': 'Testing text',
}
t1='<h1 tal:content="test"></h1>'
context = getEngine().getContext(data)
buffer = StringIO()
pt = PageTemplate()
pt.write(t1)
pt._cook()
TALInterpreter(pt._v_program, pt._v_macros, context, buffer)()
macro = buffer.getvalue()
print macro
_______________________________________________
Zope3-users mailing list
[email protected]
http://mail.zope.org/mailman/listinfo/zope3-users