[Web-SIG] htmlgen

David Fraser davidf at sjsoft.com
Fri Oct 31 10:42:52 EST 2003


Greg Stein wrote:

>On Thu, Oct 30, 2003 at 10:44:52AM -0600, Ian Bicking wrote:
>  
>
>>On Thursday, October 30, 2003, at 10:33 AM, Gregory (Grisha) Trubetskoy 
>>wrote:
>>    
>>
>>>HTMLgen has a DocumentTemplate thing which is a bare bones templating
>>>system allowing for substitution in a text file. I think something
>>>primitive of this sort and perhaps implemented based on this:
>>>
>>>http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/81330
>>>
>>>(which can probably be even further optimized)
>>>
>>>would be nice to have in stdlib.
>>>      
>>>
>>A templating system in its most naive form is just a kind of string 
>>substitution.  If that's the kind of thing we're looking for, then 
>>perhaps -- but it has to be usefully better than %.  (Though % would be
>>    
>>
>
>Right. Simple interpolation is rarely enough. The features that I found to
>be useful in a templating system:
>
>* interpolation
>* conditionals
>* iteration
>* structured objects  (i.e. something like: foo.bar)
>* including sub-templates
>
>I've also found that *restricting* the functionality to just this limited
>set helps to provide clarity and avoid complex abuses of templates. I look
>at the task simply as "rendering data" and prefer a simple syntax and
>functionality to match that.
>
>Cheers,
>-g
>
>p.s. yah yah, this is an implicit pimping of my ezt module :-)
>   http://svn.webdav.org/repos/projects/ezt/trunk/ezt.py
>
>  
>
What I've found really helpful in my jtoolkit framework is to allow 
anything to go inside a tag object (in between the start and end tags), 
including a string, another tag object, or a list of any of the above.
The toolkit then expands any of the required items.
pagelinks = []
for pagelinknum in range(1, len(pages)+1):
pagelinktext = "Page %d" % pagelinknum
if pagelinknum = currentpagenum:
pagelinktext += " (current)"
pagelinklink = '?page=%d' % pagelinknum
pagelinks.append(widgets.Link(pagelinklink, pagelinktext))
pagelinks.append(' ')
e.g. widgets.Page(title, contents=[widgets.Paragraph(pagelinks), 
restofcontents])

David





More information about the Web-SIG mailing list