I don't have much time right now to extend much on the subject... So I'll be quick. If you want more info send me a mail.
I generate this website from "RST" files: text file with as little formatting as possible. You can see the rst file that generated each page by clicking on the "text" button, on the upper right of the page. I use the python script "rest2web" for this, plus a heavy load of python scripts and a large python template. The navigation bars and alike are added automatically by rest2web and my template.
My template is nothing but a html file (hand-written), with a heavy amount of embedded python code that get executed by rest2web. Rest2web creates the html files by compiling the rest to html and adding the navigation elements. A css controls the appearance of all this. I have fought with the css to get a decent look under Internet Explorer, which does not always respect the standards, and, above all, is missing the "max-width" tag. This website renders better under firefox (or anything that respects standards better than Internet Explorer).
The template, when it is applied to a rst file, also tries to compile the rst file to a pdf by generating a LaTeX file, and running pdflatex on it. It is not perfect and the conversion sometimes fails. I have not time to loose on tracking those problems, so I just ignore them, and not every page has its pdf version.
The reason why I chose rst is that it is a very light markup language that can be converted both in html and LaTeX. I put as little formatting as possible in the text.
I don't have much time to go into details, but are the files that I use to create my webpage with rest2web:
The template file: template.txt
The rest2web ini file: gael_site.ini
The ICELog and KrubLog rules are rules to grab the work related blogs that built from python scripts on a server at the lab.
I use a makesite.py file that simply calls rest2web setting the Python sys.path properly, to control which versions of rest2web and docutils get loaded.
The gael python module, used in the template: gael.py (renamed from gael.py to gael_py to avoid having my provider executing it). As I am lazy I have not found the time to understand how to point the python code in the template to load it without putting it in the rest2web source directory. That's fine because I use rest2web svn, and therefore it is not packaged by my distribution, but just store in a subdirectory of my website sources.
... I guess I have forgotten some stuff. Do not hesitate to ask. All this is a bit hackish but I do not have time to make it cleaner.
The way my website is organized is that I have a www directory with the Makefile, in which there is a src sub-directory with the sources of the website, a rest2web directory with an svn checkout of rest2web, the gael.py module, and the gael_site.ini file, and an out sub-directory where the website gets built and that gets synced with the server that hosts my webpage.
I almost just reinvented the wheel by writing a python script to automatically rotate the images coming out of my digital camera according to their EXIF orientation tag. Don't do this : use the jhead unix program, along with ImageMagick great convert
jhead -autorotate images
This preserves the EXIF tags.