Ian Ward

Boxkite Inc.
Urwid 2014-02-09 (1.2.0)
Speedometer 2011-12-08 (2.8)

Moving to Python 3

Urwid Applications
Urwid Intro
Unfortunate Python
Django 1.1
Article Tags


Ian Ward's email:
first name at this domain

wardi on OFTC, freenode and github

Locations of visitors to this page

Gerbi CMS

Gerbi CMS
Posted on 2012-04-26.

Gerbi CMS (nee django-page-cms) is a multilingual content management system written in Python and based on the Django web framework. It's currently my favourite CMS software and use it for a number of web sites I administer.

I'll be giving a talk about Gerbi CMS at the next OCLUG and OPAG meetings resembling this article.

Please, Not Another CMS


Few developers I know look forward to working on a CMS. They're big, complicated things that come with assumptions and limitations that don't fit every use case. Users often have trouble making them do what they want. Custom code is almost always required, but maintaining that code across upgrades is error-prone and unrewarding.

A CMS for Developers

        'Development Status :: 5 - Production/Stable',
        'Environment :: Web Environment',
        'Intended Audience :: Developers',
        'License :: OSI Approved :: BSD License',
        'Operating System :: OS Independent',
        'Programming Language :: Python',
        'Framework :: Django',
        'Programming Language :: Python :: 2.3',
        'Programming Language :: JavaScript',
        'Topic :: Internet :: WWW/HTTP :: Site Management',

Gerbi CMS is a Django "app" written in Python. Python is friendly programming language with an easy to read syntax, and Django is one of the most popular web frameworks for Python. There are hundreds of well written open source Django apps available that can be combined to create a web site.

Do one thing, and do it well

Gerbi CMS follows the Unix philosophy and relies on other apps for its core:

  • django-mptt is used for tracking and managing the page hierarchy.


and optional features:

Make Users Happy


Gerbi CMS fits cleanly into Django's admin screens. A small amount of JavaScript is used where it makes interacting with the page hierarchy or settings easier. If you've enabled fine-grained permissions, tagging, publication dates and custom editors they are integrated with the admin interface.

Everything can be localized, including the page URLs. The list view also marks languages that need to be updated, and different language versions may be viewed side-by-side.

Old revisions of page content are stored in the database and it's easy to revert to any previous version. Old URLs continue working after you've renamed or moved a page.

The example program provided includes code that lets you edit content directly on the live site after you have logged in to the admin pages.

Make Developers Happy

  "gerbi_cms_page_export_version": 4,
  "pages": [
      "title": {
        "en-ca": "Another subpage"
      "complete_slug": {
        "en-ca": "help/another-subpage"
      "content": {
        "body": {
          "en-ca": "<p>Help subpage content</p>"
      "creation_date": "2012-04-10T22:29:44.083000",
      "last_modification_date": "2012-04-14T08:37:20.612603",
      "publication_date": "2012-04-10T22:29:44.096000",
      "publication_end_date": null,

Users vary widely in technical ability, and Gerbi CMS lets you leave out or disable any feature that you don't need or that might lead to confusion. Less confused users means less support calls.

Gerbi CMS is stable and release management is handled professionally. Its testing is extensive with an automated test suite at close to 90% coverage. This means fewer unpleasant surprises for developers.

Most custom code can be written as normal Django templates or template tags, which are small snippets of code that run when pages are rendered. Integration between pages and data from custom apps or other 3rd party apps is possible with a configuration setting. Anything else required can be done with custom view functions that may include data from the page being displayed.

If you're used to github submitting changes to Gerbi CMS is easy. The developers are very helpful on github and the mailing list. Shown above is a snippet of a JSON page export, a feature accepted earlier today.


Soon I'll be working on combining my django-dynamicsites-lite project with Gerbi CMS to create a "hosted" CMS project where all that's required to create a new CMS site is creating a row in the database. I'll post an example project when that's working.

While every choice of software is a trade off, Gerbi CMS has relatively few negatives. Users of sites I've built with Gerbi CMS are happy. In the future when I must use a CMS I'm likely to keep building sites with it.

Tags: Django Ottawa OCLUG Software Python