[Zope] ZClass derrived from Image does not call "view" from within <dtml-var>

Noah Noah@noah.org
Sun, 15 Oct 2000 12:23:06 -0700


Hi,

I'm a Zope beginner. I'm trying to create an ImageTemplate ZClass. This will work
similar to an Image, but the user can insert it directly in DTML using <dtml-var MyImage>
and it will get expanded into HTML (with formatting, <img> tag, caption, etc.)
This may be long and complicated, but I thought that #4 below was interesting
because it demonstrates how to get at base class methods even if you have
overridden them.

OK, here's the situation:
1. I created a ZClass derived from Image. 
2. I overloaded the index_html to add spit out some HTML instead of the image.
3. If I call an instance of the ZClass directly I get the expected results. 
    The index_html is called and I get back some HTML.
    Here: http://63.199.26.229:8080/c/gato
4. To get to the image I created an External Method that calls the index_html
    method of the my base class (Image):
    # I create an External Method called IMG that calls this Python method:
    def super_index_html (self):
             for classy in self.__class__.__bases__:
                     if classy.__name__ == 'Image':
                             return classy.index_html (self, self.REQUEST,\
                             self.REQUEST.RESPONSE)
    Example: http://63.199.26.229:8080/c/gato/IMG

So far, so good!

Now all I want to do is insert my ZClass in some DTML. Here's what happens:
1. I try to insert in instance of my ZClass into a DTML Method using:
    <dtml-var gato>
2. The Publisher does not call the view method (index_html) of the object!
Instead it calls str() which is __str__ in Image and that calls Image.tag().
I can't overload __str__ because Zope does not allow a method to start
with _ underscore.

I ran this in the debugger, Publish.publish() (line 173) has this code:
         if result is not response: response.setBody(result)
This is where the trouble begins. setBody() calls str() function on the object.

How do I insert my ZClass into DTML now?

Yours,
Noah