It is a recurrent problem that is displays tree-like structures like 
threaded comments. For example:

db.define_table('post',
                Field('parent_id','reference post'),
                Field('body'))

where each comment has a body and a parent_id (parent_id==None for the root 
comment(s))
We can populate the comments with some dummy data:

def make_up_data():
    import random, uuid
    ids = [None]
    for k in range(100):
        ids.append(db.post.insert(parent_id=random.choice(ids),
                                  body=str(uuid.uuid4())))
        if k==0:
            ids.pop(None)
if db(db.post).isempty(): make_up_data()

The new feature in trunk allows you to select the comments are organized 
them into trees.

   roots = db(db.post).select().as_trees()

This returns a list of parent nodes. Each not stores its own children, 
recursively.

Now you can print them all using a tree traversal:

    def show(row,n=0):
        return '  '*n+row.body+'\n'+''.join(show(c,n+1) for c in 
row.children)
    print show(roots[0])

Notice you can specify the name of the parent field:

    roots = db(db.post).select().as_trees(parent_name="parent_id")

Please let me know if you think this can be improved.

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to