Corey Kovacs schrieb:
> I am trying create a representation of a computer rack using genshi in 
> TG2. What I am trying to do is
> loop through the rack elevations and when I find an elevation where a 
> host belongs, I want to add some
> data to show a host is at that spot. Thats the easy part. I also want to 
> modify the rowspan for the <td>
> element so that the host <td> spans the appropriate number of elevations 
> to show the vertical size of
> the machine.
> 
> I've done this using PHP but have long since decided to rewrite my 
> project in Python/TG. Now I am
> finding that i am somewhat limited in what i can achieve with immutable 
> variables.
> 
> Basically, I need this..
> 
> temp=0
> print "<TABLE>"
> print "<TR><TD>row</TD><TD>rack.rackid</TD><TD>row</TD></TR>"
> for(row=1; row<43; row++)
>    for host in hostlist:
>      if host.elevation == row:
>          uspan = host.height-1
>          print "<TR><TD>row</TD><TD 
> rowspan=uspan>host.hostname</TD><TD>row</TD></TR>"
>          while temp > 0 :
>            row++
>            print "<TR><TD>row</TD><TD>row</TD></TR>"
>            uspan--
>    else
>          print "<TR><TD>row</TD><TD></TD><TD>row</TD></TR>"
>           
> print "<TR><TD>row</TD><TD>PDU</TD><TD>row</TD></TR>"          
> print "<TR><TD>row</TD><TD>PDU</TD><TD>row</TD></TR>"          
>   
> 
> The above (really ugly) pseudo-code mashup tries to explain it

I guess there is an error in there, the temp-variable is never set. But 
I guess you could ditch it & use

while uspan:
     ...


Now in genshi, one does this via pre-computation of the rowlist. 
Essentially, you extract your logic to create a data-structure that fits 
your needs. You can do this in your controller (I don't see anything 
wrong with that, the MVC-pattern in webapps goes only so far), or inside 
a <?python-block.

rows = [None] * 43
for host in hostlist:
     host_rows = [Bunch()] * host.height
     for row in host_rows:
         row.rowspan = None
         row.host = host # for template reference
     host_rows[0].rowspan = host.heighth - 1
     rows[host.elevation:host.elevation + host.height] = host_rows


Then in the template, you can do this:

<table>
   <py:c py:strip="True" py:for="row in rows">
   <tr py:if="not row">normal row without host</tr>
   <tr py:if="row and row.rowspan"><!-- first row with host -->
   </tr>
   <tr py:if="row and not row.rowspan"><!-- following host-rows -->
   </tr>
   </py:c>
</table>



Diez

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"TurboGears" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/turbogears?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to