[Zope] Translator/render() strangeness
Cees de Groot
cg@cdegroot.com
Thu, 26 Apr 2001 15:30:28 +0200
I just tried to use Translator in 2.3.1 for the first time. It behaves strange
when I use <dtml-lvar some_image>, and it seems to hinge on something in
DT_Util.render():
def render(self, v):
"Render an object in the way done by the 'name' attribute"
if hasattr(v, '__render_with_namespace__'):
v = v.__render_with_namespace__(self)
else:
vbase = getattr(v, 'aq_base', v)
if callable(vbase):
if getattr(vbase, 'isDocTemp', 0):
v = v(None, self)
else:
v = v()
return v
When I use <dtml-lvar some_image>, the image is eventually passed to render()
by Translator/LocalizeTag. Some print statements reveal in this case:
type(v) = <extension class Acquisition.ImplicitAcquirerWrapper at 40201e60>
callable(v) = 1
type(vbase) = <extension class OFS.Image.Image at 85acac0>
callable(vbase) = 1
So render calls the line "v = v()". Result:
Traceback (most recent call last):
File "/net/fs-1/bigdisk/opt/zope/current/lib/python/Products/Translator/Loc
alizeTag.py", line 102, in render
return str(render(md, v))
File "/net/fs-1/bigdisk/opt/zope/current/lib/python/DocumentTemplate/DT_Uti
l.py", line 282, in render
v = v()
AttributeError: __call__
So v is callable, but v() returns this attribute error?
(I've wrapped the v=v() inside a try:except: and it now works again...)
--
Cees de Groot http://www.cdegroot.com <cg@cdegroot.com>
GnuPG 1024D/E0989E8B 0016 F679 F38D 5946 4ECD 1986 F303 937F E098 9E8B