[Zope3-Users] How to render PageTemplate manually?

Łukasz Łakomy lukasz at altcontrol.pl
Wed Jan 4 07:55:08 EST 2006


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):
  File "C:\Program
Files\Python2.4.2\Lib\site-packages\zope\publisher\publish.py", line 138, in
publish
    result = publication.callObject(request, object)
  File "C:\Program
Files\Python2.4.2\Lib\site-packages\zope\app\publication\zopepublication.py"
, line 164, in callObject

    return mapply(ob, request.getPositionalArguments(), request)
  File "C:\Program
Files\Python2.4.2\Lib\site-packages\zope\publisher\publish.py", line 113, in
mapply
    return debug_call(object, args)
  File "C:\Program
Files\Python2.4.2\Lib\site-packages\zope\publisher\publish.py", line 119, in
debug_call
    return object(*args)
  File "C:\Program
Files\Python2.4.2\Lib\site-packages\zope\app\pagetemplate\simpleviewclass.py
", line 44, in __call__
    return self.index(*args, **kw)
  File "C:\Program
Files\Python2.4.2\Lib\site-packages\zope\app\pagetemplate\viewpagetemplatefi
le.py", line 83, in __cal
l__
    return self.im_func(im_self, *args, **kw)
  File "C:\Program
Files\Python2.4.2\Lib\site-packages\zope\app\pagetemplate\viewpagetemplatefi
le.py", line 51, in __cal
l__
    sourceAnnotations=getattr(debug_flags, 'sourceAnnotations', 0),
  File "C:\Program
Files\Python2.4.2\Lib\site-packages\zope\pagetemplate\pagetemplate.py", line
117, in pt_render
    strictinsert=0, sourceAnnotations=sourceAnnotations)()
  File "C:\Program
Files\Python2.4.2\Lib\site-packages\zope\tal\talinterpreter.py", line 270,
in __call__
    self.interpret(self.program)
  File "C:\Program
Files\Python2.4.2\Lib\site-packages\zope\tal\talinterpreter.py", line 345,
in interpret
    handlers[opcode](self, args)
  File "C:\Program
Files\Python2.4.2\Lib\site-packages\zope\tal\talinterpreter.py", line 897,
in do_useMacro
    self.interpret(macro)
  File "C:\Program
Files\Python2.4.2\Lib\site-packages\zope\tal\talinterpreter.py", line 345,
in interpret
    handlers[opcode](self, args)
  File "C:\Program
Files\Python2.4.2\Lib\site-packages\zope\tal\talinterpreter.py", line 531,
in do_optTag_tal
    self.do_optTag(stuff)
  File "C:\Program
Files\Python2.4.2\Lib\site-packages\zope\tal\talinterpreter.py", line 516,
in do_optTag
    return self.no_tag(start, program)
  File "C:\Program
Files\Python2.4.2\Lib\site-packages\zope\tal\talinterpreter.py", line 511,
in no_tag
    self.interpret(program)
  File "C:\Program
Files\Python2.4.2\Lib\site-packages\zope\tal\talinterpreter.py", line 345,
in interpret
    handlers[opcode](self, args)
  File "C:\Program
Files\Python2.4.2\Lib\site-packages\zope\tal\talinterpreter.py", line 867,
in do_defineMacro
    self.interpret(macro)
  File "C:\Program
Files\Python2.4.2\Lib\site-packages\zope\tal\talinterpreter.py", line 345,
in interpret
    handlers[opcode](self, args)
  File "C:\Program
Files\Python2.4.2\Lib\site-packages\zope\tal\talinterpreter.py", line 965,
in do_defineSlot
    self.interpret(block)
  File "C:\Program
Files\Python2.4.2\Lib\site-packages\zope\tal\talinterpreter.py", line 345,
in interpret
    handlers[opcode](self, args)
  File "C:\Program
Files\Python2.4.2\Lib\site-packages\zope\tal\talinterpreter.py", line 955,
in do_defineSlot
    self.interpret(slot)
  File "C:\Program
Files\Python2.4.2\Lib\site-packages\zope\tal\talinterpreter.py", line 345,
in interpret
    handlers[opcode](self, args)
  File "C:\Program
Files\Python2.4.2\Lib\site-packages\zope\tal\talinterpreter.py", line 758,
in do_insertStructure_tal
    structure = self.engine.evaluateStructure(expr)
  File "C:\Program Files\Python2.4.2\Lib\site-packages\zope\tales\tales.py",
line 698, in evaluate
    return expression(self)
  File "C:\Program
Files\Python2.4.2\Lib\site-packages\zope\tales\expressions.py", line 204, in
__call__
    return self._eval(econtext)
  File "C:\Program
Files\Python2.4.2\Lib\site-packages\zope\tales\expressions.py", line 198, in
_eval
    return ob()
  File "c:\Program
Files\Python2.4.2\zope-instances\instance-8080\lib\python\acc\swordfish\basi
c\portlet.py", line 72, i
n renderText
    output = page_template(content=object,temp="TEMP")
  File "C:\Program
Files\Python2.4.2\Lib\site-packages\zope\pagetemplate\pagetemplate.py", line
96, in __call__
    return self.pt_render(self.pt_getContext(args, kwargs))
  File "C:\Program
Files\Python2.4.2\Lib\site-packages\zope\pagetemplate\pagetemplate.py", line
117, in pt_render
    strictinsert=0, sourceAnnotations=sourceAnnotations)()
  File "C:\Program
Files\Python2.4.2\Lib\site-packages\zope\tal\talinterpreter.py", line 270,
in __call__
    self.interpret(self.program)
  File "C:\Program
Files\Python2.4.2\Lib\site-packages\zope\tal\talinterpreter.py", line 345,
in interpret
    handlers[opcode](self, args)
  File "C:\Program
Files\Python2.4.2\Lib\site-packages\zope\tal\talinterpreter.py", line 618,
in do_insertText_tal
    text = self.engine.evaluateText(stuff[0])
  File "C:\Program Files\Python2.4.2\Lib\site-packages\zope\tales\tales.py",
line 706, in evaluateText
    text = self.evaluate(expr)
  File "C:\Program Files\Python2.4.2\Lib\site-packages\zope\tales\tales.py",
line 698, in evaluate
    return expression(self)
  File "C:\Program
Files\Python2.4.2\Lib\site-packages\zope\tales\expressions.py", line 204, in
__call__
    return self._eval(econtext)
  File "C:\Program
Files\Python2.4.2\Lib\site-packages\zope\tales\expressions.py", line 191, in
_eval
    ob = self._subexprs[-1](econtext)
  File "C:\Program
Files\Python2.4.2\Lib\site-packages\zope\tales\expressions.py", line 117, in
_eval
    ob = vars[base]
KeyError: 'context'

Lukasz Lakomy



More information about the Zope3-users mailing list