[Zope] Re: Accumulate vars with <dtml-var expr="...">

Gabriel Genellina gagsl-zope at yahoo.com.ar
Tue Jul 25 20:01:11 EDT 2006

At Tuesday 25/7/2006 20:21, Jesper Steen Steffensen wrote:

> >I have a table with a list of values. To list my values in a dtml
> >method i write <dtml-var value> inside the appropriate dtml-in tag.
> >In the next column I have the <dtml-var sequence-number>
> >
> >I want to accumulate my values so the result will be:
> >
> >Is it possible to make this accumulated value as a
> ><dtml-var expr="[something like sum of values where seq-num <=seq-num]">
>Write a simple python script. Input=original list of values.
>Output=list of (value, accum). Iterate the result with dtml-in as before.
>Can you pls explain it a bit more in detail - afraid I'm still a bit 
>new to Zope and dtml/python. What would the Script (Python) look like?
>Thanks for your help! :-)

This is a pure programming exercise. You said:

>13 1
>10 2
>11 3
>10 4
>12 5
>I want to accumulate my values so the result will be:
>13 1 56
>10 2 43
>11 3 33
>10 4 22
>12 5 12

So apparently you need to accumulate the *remaining* values. The 
script would receive a list of values: [13,10,11,10,12]  and return a 
list of tuples [(13,56),(10,43),(11,33)...]
A pure python function would look like this:

def accumulate_remaining(values):
     values = map(float, values) # make sure they are true numbers
     result = []
     for i in range(len(values)):
         result.append((values[i], sum(values[i:])))
     return result

To convert it to a "Script (Python)": create the script, name it as 
the function, leave out the "def" line and put the body inside the 
script, declare a single parameter "values".
Then use <dtml-in "accumulate_remaining(your_list_of_values)"> and 
inside it, <dtml-var "sequence-item[0]"> <dtml-var 
"sequence-item[1]"> or something like that.
This has not been tested but should work. The dtml syntax may be 
wrong, tough, I dont use dtml anymore.

Gabriel Genellina
Softlab SRL 

Preguntá. Respondé. Descubrí.
Todo lo que querías saber, y lo que ni imaginabas,
está en Yahoo! Respuestas (Beta).
¡Probalo ya! 

More information about the Zope mailing list