RE: [Zope] How to render a HTMLFile in a method in a product
From: Chris Withers [mailto:chrisw@nipltd.com]
I got this answer to my question about how to render a dtml document from a method.
testisDocTemp = 1 def test(self,ignored,md): " A simple test method " return HTMLFile('skins/' + self.skin, globals())(None,md)
And I have been busy trying to read the source code to understand the advise: As far as I understand the story goes a little like this: HTMLFile returns an object (through inheritance) "String" in file "DT_String.py" that has "__call__()" implemented, which means that the class can be called as a function... Hmm ... I had actually not seen this method used in Python before. def __call__(self,client=None,mapping={},**kw): This method accepts an object in which it will look up values to insert in the dtml file, and a mapping object (dictionary) that also will look up values to insert. So i guess that is what (None,md) does. But I dont understand what "ignored" does in my method, as it is unused, unless it is used by md
def test(self,ignored,md):
Furthermore I dont understand what md is. Some kind of mapping object naturally, but where does it come from? Also what is testisDocTemp supposed to do? If I grep the source a "isDocTemp" shows up but is isn't easy to see what this does either. Regards Max M
Max Møller Rasmussen wrote:
def __call__(self,client=None,mapping={},**kw):
This method accepts an object in which it will look up values to insert in the dtml file, and a mapping object (dictionary) that also will look up values to insert.
So i guess that is what (None,md) does.
But I dont understand what "ignored" does in my method, as it is unused, unless it is used by md
Nope, ignored is the client, which you don't need to worry about.
def test(self,ignored,md):
Furthermore I dont understand what md is. Some kind of mapping object naturally, but where does it come from?
pDocumentTemplate.py has one implementation of it. it's a stack of dictionaries, basically... When you do md['key'], it looks for key in the top dictionary, then in the next one down, then in the one below that, etc, and only throws a key error if one can't be found at all...
Also what is testisDocTemp supposed to do?
This is a bit of ExtensionClass wierdness. Think of it has "give the test object the 'isDocTemp' attribute".
If I grep the source a "isDocTemp" shows up but is isn't easy to see what this does either.
If some arcane bit of Zope's calling machinery finds this (probably in BaseRequest.py) it sends different parameters to __call__. HTH, Chris
participants (2)
-
Chris Withers -
Max Møller Rasmussen