[Zope] Calling a python product with paramaters PLEASE HELP

Dylan Reinhardt zope@dylanreinhardt.com
Fri, 22 Nov 2002 23:31:15 -0800


Your instance bar is not callable, which is why you're unable to pass it 
arguments.

There are two ways to get what you want: the DTML way and the Python way.

Here's the DTML way:

<dtml-with bar>
   <dtml-var "index_html(100,100)">
</dtml-with>

I'm not sure that makes any sense from a design standpoint, but it should 
work anyway.

The Python way (superior, IMO) adds a function to your product module:

def __call__(self, width=100, height=200):
    return self.index_html(width, height)

At which point, <dtml-var "bar(x,y)"> should yield what you're looking for.

Take your pick.

HTH,

Dylan


At 11:04 PM 11/22/2002, you wrote:

>Hi all,
>
>Here is the index_html of a product with the index_html embeded in the 
>module source-
>
>     def index_html(self,width=100, height=200,RESPONSE=None,REQUEST=None):
>         "This is the index_html method"
>         im=PIL.Image.new('RGB', (width,height))
>         draw = PIL.ImageDraw.Draw(im)
>         draw.rectangle([0,0,0,0], fill =(0,0,0))
>         RESPONSE.setHeader("Content-type", "image/gif")
>         outFile = cStringIO.StringIO()
>         im.save(outFile, 'gif')
>         RESPONSE.write(outFile.getvalue())
>         return ''
>
>
>If I call an instance of the product from a dtml method with <dtml-var 
>bar> I get my picture.
>
>If I call an instance of the product from a dtml method with <dtml-var 
>bar(100,100)">, I get-
>
>Error Type: AttributeError
>Error Value: __call__
>
>Traceback (innermost last):
>   File C:\Zope\lib\python\ZPublisher\Publish.py, line 150, in publish_module
>   File C:\Zope\lib\python\ZPublisher\Publish.py, line 114, in publish
>   File C:\Zope\lib\python\Zope\__init__.py, line 159, in 
> zpublisher_exception_hook
>     (Object: Zope)
>   File C:\Zope\lib\python\ZPublisher\Publish.py, line 98, in publish
>   File C:\Zope\lib\python\ZPublisher\mapply.py, line 88, in mapply
>     (Object: barcall)
>   File C:\Zope\lib\python\ZPublisher\Publish.py, line 39, in call_object
>     (Object: barcall)
>   File C:\Zope\lib\python\OFS\DTMLMethod.py, line 127, in __call__
>     (Object: barcall)
>   File C:\Zope\lib\python\DocumentTemplate\DT_String.py, line 473, in 
> __call__
>     (Object: barcall)
>   File C:\Zope\lib\python\DocumentTemplate\DT_Util.py, line 159, in eval
>     (Object: bar(100,100))
>     (Info: bar)
>   File <string>, line 2, in f
>AttributeError: (see above)
>
>I have nearly got this product working the way I want it to, so any help 
>you can give will be greatly appreciated.
>Regards
>Sean Kemplay
>
>
>Do you Yahoo!?
><http://rd.yahoo.com/mail/mailsig/*http://mailplus.yahoo.com>Yahoo! Mail 
>Plus - Powerful. Affordable. 
><http://rd.yahoo.com/mail/mailsig/*http://mailplus.yahoo.com>Sign up now