HTML-TEMPLATE is a portable library for Common Lisp which can be used
to fill templates with arbitrary (string) values at runtime.
(Actually, it doesn't matter whether the result is HTML. It's just
very likely that this will be what the library is mostly used
for.)

It is loosely modeled after the Perl module HTML::Template and compatible
with a subset of its syntax, i.e. it should be possible to use your
HTML-TEMPLATE templates with HTML::Template as well (but usually not
the other way around).

HTML-TEMPLATE translates templates into efficient closures which
can be re-used as often as needed. It uses an intelligent cache
mechanism so you can nevertheless update templates while your program
is running and have the changes take effect immediately.

The rationale behind something like HTML-TEMPLATE or HTML::Template is
that you want to separate code and layout (I think in Newspeak these
are called the "Business Layer" and the "Presentation
Layer") as much as possible when generating HTML, especially if
you work with graphical artists who are responsible for the visual
appearance of your site but aren't programmers. Matter of fact, you
can't separate code and layout completely. I've worked (or
had to work) with several different approaches over the years,
including emitting HTML from CGI scripts directly, using tools like Embperl, Mason, PHP (yuk!), or Java/XML/XLST stuff, or
employing different Lisp markup
languages but found that HTML::Template's approach usually works
best for me: The graphical designers only need to learn a minimal set
of new tags (three of them) and can update their templates
independently from the work done on the backend. It is simple and it
just works. YMMV, of course...