[Zope] Re: Using the set object within page templates

Max M maxm at mxm.dk
Tue Sep 27 03:35:39 EDT 2005


Floyd May wrote:
> How can I use a set object within a page template?
> 
> When I attempt to create a set (e.g. tal:define="myset
> python:set(some_list)"), zope complains that the name 'set' is not
> defined.

If you only need to read from some native python objects, you can make a 
simple wrapper. You can wrap a set() in this class and return it from 
python.

_marker = []

class Zello:

     """
     Zello (Zellophane)
     A minimal wrapper for viewing native python objects in pagetemplates.

     If you try to view attributes on simple Python objects you get a 
Permission
     error. This is pretty simple to fix in your own objects by setting:

         __allow_access_to_unprotected_subobjects__ = 1

     For some built in objects you cannot do this. This class just puts a
     transparent wrapper around such objects::

         wrapped = Zello(datetime(2005, 10, 12))

     So you can write this zpt code:

         <span tal:replace="wrapped/year" />

     If you wrap a Zope object with it, you basically remove all security
     checkcs. So don't do that.
     """

     __allow_access_to_unprotected_subobjects__ = 1

     def __init__(self, obj):
         self._obj = obj

     def __getattr__(self, attr, default=_marker):
         if default is _marker:
             return getattr(self._obj, attr)
         else:
             return getattr(self._obj, attr, default)

     def __getitem__(self, key):
         return self._obj[key]




-- 

hilsen/regards Max M, Denmark

http://www.mxm.dk/
IT's Mad Science



More information about the Zope mailing list