Example: def foo(self, REQUEST): "docstring" .... ret=[] ret.append(self.root.standard_html_header()) ret.append(""" <your tag> %s <foo>%s</foo> </your_tag> .... """ % (var1, var2)) return string.join(ret)
now that's horrible. hardcoding HTML into python is a maintenance nightmare. i suppose it's OK if you are the one who will be maintaining that code until it dies from bit-rot, but i would pity anyone else who did not write it and who has to maintain it somehow ;) one of the goals of zope (and especially ZPT now) is to keep presentation and logic apart. IMHO that's a great goal. one of the patterns that has evolved on "the other side of the fence" (meaning at zope corp), so to speak, is a "three-tier" way of coding: - python products handle all logic. they do not know about web stuff like REQUEST - python scripts are used to glue the web-unaware python product to the web - ZPT does the presentation. all the templates should ever talk to is those glue python scripts there are quite a few advantages to this: - design can be done independent from logic development. adding more logic or changing logic has no influence on the design anymore - web-unaware python products are easier to test using unit tests because you don't have to fake out certain things (such as web requests) in your test environment anymore. the code is cleaner, smaller and more efficient. and, IMHO, more understandable. etc... jens