<br><br><div class="gmail_quote">On Thu, Jun 12, 2008 at 5:40 AM, Michael Foord &lt;<a href="mailto:fuzzyman@voidspace.org.uk">fuzzyman@voidspace.org.uk</a>&gt; wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
There are also plenty of templating languages:<br>
<br>
Stan (used by Nevow)<br>
Genshi<br>
Cheetah<br>
Mako<br>
ZPT (Zope)<br>
SimpleTal (another Zope one)<br>
Kid<br>
Django template language<br>
PTL (Python templating language used by Quixote)<br>
Clearsilver (written in C with bindings for many languages)<br>
PyMeld<br>
</blockquote><div><br>Anyone want to take a stab at why there are so many?&nbsp; It seems trivial to me.&nbsp; I know I will be ridiculed for my example, but this is what I use on my personal webserver:<br><br></div></div>def PrintTemplate(file, templatedict):<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buf = open(config.Root + &quot;/templates/&quot; + file).read()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; regex = re.compile( r&quot;{{{(.*?)}}}&quot;, re.MULTILINE | re.DOTALL )<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; templatedict = copy.copy( templatedict )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; templatedict.update( config.DefaultDict )<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pos = 0<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for find in re.finditer( regex, buf ):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sys.stdout.write( buf[ pos : find.start(0) ] )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pos = find.end(0)<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; py&nbsp; = find.group(1)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; exec( py, templatedict )<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if pos &lt; len( buf ):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sys.stdout.write( buf[ pos: ] )<br><br><br>Now, people are&nbsp; very likely to tell me about how bad it is to use exec, but since I&#39;m the one programming the page, I know what&#39;s going through it.<br>
<br>In essence, this *is* a python template system.<br><br>C<br>