[Zope] Access to Python arrays

morten@esol.no morten@esol.no
Sun, 26 Nov 2000 07:51:49 GMT+1


> I am working on a product in which one of the objects keeps an array. I've
> already overcome the problems with making the array persistent (i.e. by not
> using .append, but intead re-assigning the array each time). Anyway...I
> digress..

This sounds a bit awkward, if you could post some of the code (or release an
alpha version of your product, that'd give us a context..).

> This prints out the id of each of my objects. But I ALSO want to print out the
> contents of the array, indented after each instances id. What is the best way > to do this in DTML? Is there as way? Lets say for arguments sake that each
> array element is a string, how do I iterate through the array and print the
> strings.

If your class is defined somewhere along these lines:

class myclass(Persistent,
              Yadayada,
              yada):

   def __init__(self, id, body):

       self.id        self.body 
you could easiliy display the body of the object within the dtml-in loop using
the same approach as with with id, <dtml-var body>.

If you're wondering how to display _the entire object_, then defining a __call__ would probably be the right thing, and you could do the loop like this:

<dtml-in "objectValues('My object')">
    <dtml-var sequence-item>
</dtml-in>

> Lets say each element in the array is anothe array (of 5 elements), How do
> I loop over the array and pull out the sub arrays and print those five
> elements?

Easy enough:

<dtml-in "objectValues('My object')">
     <dtml-in "_['sequence-item'].sequence_like_object">
             This is the contents of one of the array elements contained within
             an object with meta type <dtml-var meta_type>:
             <dtml-var sequence-item>
     </dtml-in>
</dtml-in>

> Any help/direction would be appreciated, I've checked the docs and refered to
> some sample products but I either missed something obvious (probable) or It's
> hard..or something :-)

Well, hope this helps then.  
I'd also recommend reading the Python tutorial, and other introductory Python material, if you're not familiar with it.

-Morten