Re: Rendering of list/table data with a template

Glyph Lefkowitz <[email protected]>
Newsgroups gmane.comp.python.twisted.web
Message-ID <[email protected]>
On Aug 23, 2011, at 8:34 AM, Florian Lindner wrote:

> Hello,
> 
> I'm still trying to figure out what is the correct way to render data in a 
> template that comes from a list, e.g. to produce a table.
> 
> I have figured out a way, but I got no idea if that's the way to go:
> 
>    <table>
>      <tr t:render="table_row"><td><t:slot name="table_content" /></td></tr>
>    </table>
> 
> with that renderer:
> 
>    @renderer
>    def table_row(self, request, tag):
>        rows = ["A", "B", "C"]
> 
>        output_list = []
>        for row in rows:
>            t = tag.clone()
>            t.fillSlots(table_content=row)
>            output_list.append(t)
>        return output_list
> 
> Is that how it should be done in twisted templating?

This is pretty close to the way I've been doing it, which is:

@renderer
def table_row(self, request, tag):
    rows = ['A', 'B', 'C']
    for row in rows:
        yield tag.clone().fillSlots(table_content=row)

The logic is basically the same, it is just a little bit shorter.  Sometimes I will also include a 'hasRows' and 'noRows' renderers in the outer template, like:

<table t:render="hasRows">
<tr t:render="table_row"><td><t:slot name="table_content" /></td></tr>
</table>

<div t:render="noRows">
No rows.
</div>

The renderers for these just look like this:

@renderer
def hasRows(self, request, tag):
    rows = ...
    if not rows:
        return ''
    return tag

Fans of nevow's 'pattern' feature will be quick to point out that this is one of the use-cases for patterns, and indeed, so far I have had to write some logic to cache 'rows' on 'self', and a few redundant renderers which would have been unnecessary if we had patterns.  But I actually find templates like this easier to read, and it saves me from having to use <t:transparent>s that hold the table and the div in the same renderer, which makes my browser ever so slightly happier to view the template un-rendered.  I think I'll probably add some utilities for doing these things automatically, once I have a little more experience with this new, simplified templating style :).

Hope this was a helpful insight into some real-world t.w.t usage :).

-glyph

_______________________________________________
Twisted-web mailing list
[email protected]
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.