From: Mike O. <ir...@ms...> - 2001-04-24 06:44:14
|
I've posted Plow2 at http://test.mso.seaskin.org/python/webware/Plow2.tar.gz Plow2 is a string template class that is more pythonic than the Plow1 I posted a few weeks ago. Its goal is to be as small and simple as possible, and usable both within and outside of Webware. Plow2 allows only one template per instance. The constructor can read the template from a file or a string. Plug-in values are set via UserDict assignment and must be set explicitly (no NameValueAccess). The block(), keep() and kill() methods were carefully designed to allow convenient manipulation of for-blocks and if-blocks. (This is in lieu of presentation logic: all logic is kept in Python code; the template includes only markers to identify the start and end of the block.) Netsted templates may be created by embedding a template instance inside another template instance as a plug-in value: when you call str() on the outer template to do the substitution, the inner templates are handled recursively. The name Plow2 indicates this is a research project still in progress, so Plow3, Plow4, etc variations are possible. The caller can switch versions by doing "from Plow2 import Plow" and avoid sprinkling the version number all over her code; she'll only need to change her methods when/if the interface changes. The tarball contains: README -- usage instructions Plow2.py -- The Plow2.Plow class plowtest.py -- an extensive test script You can use it standalone or in Webkit. To use it in Webkit, copy Plow2.py to any import directory and import it. Differences between Plow2 and other template systems: -- Sasa's SimplateKit has a more PHPlib-like interface, and allows multiple templates in the same instance (all templates and plug-in values together in one flat dictionary). -- Tavis's TemplateServer has many more features, including NameValueAccess and presentation logic in the template (a "template language"), at the cost of greater complexity. Future plans: ** ** Convert to kit format following the example of SimplateKit. ** Integrate NameValueAccess as an optional feature. (How? Let caller pass 'self' or 'PlacesToSearch' to the constructor?) ** Want clone/spawn/chain method to duplicate the instance? Carry over all plug-in values, no plug-in values, or only specified plug-in values? ** Allow escape syntax for strings in the template that look like placeholders but are not. -- -Mike (Iron) Orr, ir...@ms... (if mail problems: ms...@ji...) http://mso.oz.net/ English * Esperanto * Russkiy * Deutsch * Espan~ol |