On 6/2/05, Ian Bicking <[EMAIL PROTECTED]> wrote: > If there's no code then it's not a presentation layer. It's an HTML > layer, nothing more, just dumb data. Presentation requires logic. > > From that perspective, I think doing proper model/presentation > separation using something like HTMLTemplate requires discipline and the > addition of another Python presentation layer.
Precisely. I find this one of the biggest advantage of HTMLTemplate. You don't have to learn yet another half baked scripting language to build the presentation logic. You just use Python. So how to structure the model/presentation in HTMLTemplate's case? Here is what I have done: foo.cgi - application logic fooView.py - presentation logic fooView.html - template fooView would have the presentation logic. It is mainly methods like renderXXX(). Trust me it is really straightforward. In reality I find most of my model and view are one-one corresponding. So I even cut some corner and merged foo.cgi and fooView.py into one file ;-) Some of you find the callback API a little convoluted or clumsy. After using it for a while I think I have found the way to work efficiently. I'm going to get down on some detail here. Hopefully even people never seen HTMLTemplate can have a glimpse of how it works. First you parsed the template. The template object have a wonderful (diagnosis) method called structure(), which dump the view of the tree. It helps a lot in coding the presentation logic. For example, my template has: root con:title con:query con:error_msg con:num_match con:item_from con:item_to con:item_total rep:match_item con:address con:description con:archive_link con:host con:page_nav con:goto_prev rep:goto_page con:goto_next You'll need 3 render methods, one for the root and 2 for each rep node. render() render_match_item() render_goto_page() In each method, you are going to fill out the child items. For example, in the main render() method, you should probably fill title query error_msg num_match num_match.item_from num_match.item_to num_match.item_total page_nav? page_nav.goto_prev page_nav.goto_next Once I discovered the structure() method writing the presentation logic becomes natural. ---------------------------------------------------------------------- Let me cast another perspective to show why I like HTMLTemplate so much. Cheetah's user guide have about 100 pages. Enhancement and new features are probably on the way. HTMLTemplate's documentation consist of one short file & a few examples. That's probably all you'll ever need. It is finished. No significant enhancement is expected. I think that says a lot about its conceptual complexity and completeness. Wai Yip _______________________________________________ Web-SIG mailing list Web-SIG@python.org Web SIG: http://www.python.org/sigs/web-sig Unsubscribe: http://mail.python.org/mailman/options/web-sig/archive%40mail-archive.com