RE: [Zope-dev] Rendering of objects in DTML
Thanks Leo, this is very helpful. It should probably be in a HOWTO somewhere. :)
-----Original Message----- From: Leonardo Rochael Almeida [mailto:leo@hiper.com.br]
On Tue, 2003-01-14 at 01:01, Bjorn Stabell wrote:
Bjorn Stabell wrote:
I would like
<dtml-var content> <dtml-with content>... <dtml-if content>
to call different functions. The first renders the object, the second returns a mapping of the content's attributes/properties, the third checks for "trueness" of the content. Rendering a content could be an expensive operation and I don't want to do it when doing dtml-with and dtml-if.
you can do that by having your object be non-callable (or returning self on __call__) and implementing __str__ where you can have access to the REQUEST thru self.REQUEST. <dtml-with content> works as expected because you're getting the object itself. To make <dtml-if content> work you should implement __len__ (if your object implements sequence or mapping, which it probably doesn't) or __nonzero__. Read the python docs for details on the implementation of these methods.
Cheers, Leo
-- Ideas don't stay in some minds very long because they don't like solitary confinement.
For the record, by following the same pattern it should be possible to implement a class that responds to <dtml-in content> too, by implementing __getitem__ On Wed, 2003-01-15 at 06:00, Bjorn Stabell wrote:
Thanks Leo, this is very helpful. It should probably be in a HOWTO somewhere. :)
-----Original Message----- From: Leonardo Rochael Almeida [mailto:leo@hiper.com.br]
On Tue, 2003-01-14 at 01:01, Bjorn Stabell wrote:
Bjorn Stabell wrote:
I would like
<dtml-var content> <dtml-with content>... <dtml-if content>
to call different functions. The first renders the object, the second returns a mapping of the content's attributes/properties, the third checks for "trueness" of the content. Rendering a content could be an expensive operation and I don't want to do it when doing dtml-with and dtml-if.
you can do that by having your object be non-callable (or returning self on __call__) and implementing __str__ where you can have access to the REQUEST thru self.REQUEST. <dtml-with content> works as expected because you're getting the object itself. To make <dtml-if content> work you should implement __len__ (if your object implements sequence or mapping, which it probably doesn't) or __nonzero__. Read the python docs for details on the implementation of these methods.
Cheers, Leo
-- Ideas don't stay in some minds very long because they don't like solitary confinement.
_______________________________________________ Zope-Dev maillist - Zope-Dev@zope.org http://lists.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope )
-- Ideas don't stay in some minds very long because they don't like solitary confinement.
participants (2)
-
Bjorn Stabell -
Leonardo Rochael Almeida