We're back after a server migration that caused effbot.org to fall over a bit harder than expected. Expect some glitches.

An Alternative Python.Org Content Management System

Fredrik Lundh | January 2006

moinmoin+django=python.org ?

Alt PyDotOrg CMS design sketch (click on the image to get an annotated version)

The PSF is running a project to design and deploy a new version of the python.org site. This far, that project has developed a new batch-oriented content generation tool, a design proposal, and translated some content, but that’s about it. And they’re about a year late, compared to the original plans.

Frustrated with the slow progress, and the “let’s build our own cathedral pyramid” approach used this far, I’ve been experimenting with alternative ways to maintain and produce the site, based on existing Python technology.

My current experimental system consists of a MoinMoin wiki as the editor/CMS, combined with a Django frontend for rendering. To convert the existing content, I’ve developed a simple tool that converts current HT2HTML sources to wiki markup.


The HT2HTML-to-MoinMoin converter is about 80% ready; it can translate most content, but some constructs are not handled properly. The current translator turns everything into MoinMoin markup. For the real site, most legacy material can probably be left as HTML, and some material already uses ReST, which MoinMoin can handle more or less as is.

The converter automatically rewrites all intra-site links, but the site URL layout is not finished; I’m leaning towards a wiki-style top level, with automatic redirection of old URL:s.

MoinMoin is used pretty much as is; all that’s needed is a way to “push” HTML pages from the wiki to the site. This can be done via MoinMoin save hooks, actions, or macros, or via a polling cronjob; experimental code exists for all alternatives.

A Django application converts rendered MoinMoin pages to XHTML fragments on the fly, and uses Django templates for HTML boilerplate and styling. Django caching is used to keep the load under control (the server is fast enough to render nearly 1,000,000 page views per day on an old 700 MHz test server even without caching; with caching enabled, the entire site will most likely be served entirely from memory most of the time).

A test setup of the Django application can be found here:


If that link doesn’t work, sample static output from the current renderer can be found here (~600 pages):


Note that the above is almost entirely unstyled, on purpose. If you want to help with the design, drop me a line. Feel free to drop me a line if you want help out in some other way too, of course.

See Also

An Alternative Python Reference