Blogmaker™ blog application for Django

Blogmaker 0.6, January 2008

Blogmaker™ is a full-featured, production-quality blogging application for Django. It supports trackbacks, ping and comments with moderation and honeypot spam prevention.

Blogmaker is released under a BSD license. You may "copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software" (to borrow a phrase from the more-or-less equivalent "MIT License").

Caveat: the current release (including these docs) is for people who are already familiar with Django or willing to poke around a bit. We developed Blogmaker for our own projects, though we hope it will help others leverage the awesome Django framework to create feature-rich blogs. We have additional features planned, and welcome contributions from others.



Blogmaker is production-ready; it powers our two blogs at and

Download and support

The latest release of this document is available at Blogmaker can be downloaded from the Google Code project at or the Python Package Index at If you have any questions, comments or patches, please send email to the blogmaker-users group.


Scott S. Lawton: product manager
Peter Bernheim: primary developer
Kent S Johnson: developer and in-house Python expert

Blogmaker is a trademark of PreFab Software, Inc.

Portions of Blogmaker are based on the blog application example at 23 excuses and Copyright © 2006, Andrew Gwozdziewycz.

Portions of blogmaker.comments are based on James Bennett's comment_utils and Copyright © 2007, James Bennett.

Portions of blogmaker.comments are based on django.contrib.comments and are Copyright © 2005, the Lawrence Journal-World.

See the file LICENSE.txt for details.

jQuery 1.2.1 is Copyright © 2007 John Resig ( and Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. Blogmaker includes it under the provisions of the MIT license.

feedparser is Copyright © 2002-2006, Mark Pilgrim, All rights reserved.


Blogmaker requires Python 2.5; earlier versions will not work. Blogmaker works with Django 0.96; it has not been tested with later releases.

Blogmaker processes blog entries with python-markdown. It requires python-markdown 1.6b specifically; earlier versions are buggy and later versions are not backwards-compatible.

To include images in blog entries, you must have Python Imaging Library installed. This is a requirement of Django's ImageField.

In order to install Blogmaker, you must first set up a basic Django site with the usual settings file, base template, and primary More information can be found at

Blogmaker requires the installation of two (included) Django applications:

  1. blogmaker.comments (which can be used on the non-blog portions of a site)
  2. blogmaker.util (a set of utilities shared internally with our unreleased non-blog code)

Blogmaker uses DbMigration to update the database. DbMigration is required only for future schema evolution; if there are future schema changes, we plan to include migrations to update the database as required. Although DbMigration works with any database, our usage is specific to PostgreSQL; using our migrations with other databases will require some changes.

Other features of Blogmaker will work with any Django-compatible database engine.


Blogmaker requires a number of settings to be defined in your settings file:

Add '', 'blogmaker.comments' and 'blogmaker.util' to the list of installed applications. We also require some or all of these standard applications:
Blogmaker's comment application requires that django.core.context_processors.request be one of your installed context processors. This puts a request object in the context. The comment honeypot uses this to access the IP address of a request.
The id of the primary blog user, as defined by the Django Auth/User model.
The directory where log files will be written.
Your copyright text, e.g. "All contents Copyright 2007, Acme Inc."
Defines the root URL of your site, e.g.
URL prefix for where you will serve the media directory contained at Make sure to use a trailing slash. Examples: "/media/blog/", ""
URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a trailing slash. Examples: "/media/admin/", ""
Defines the root URL for the blog path, e.g. if you want the blog to live at, this variable would be set to '/blog/'. If you want the blog to live at a different subdomain than the rest of the site, you will need to set an absolute URL: ''

If you include images in your blog entries, you should set MEDIA_ROOT and MEDIA_URL as described in the Django documentation. You must also configure your server to serve files from MEDIA_ROOT at MEDIA_URL.

The following should be set if you enable email notification for comment/trackback features:

A list of ('Name', 'email address') tuples defining the people to whom notification emails will be sent.
The default e-mail you would like e-mails to be sent from.

Blogmaker uses Django's profanity filter. You can specify a list words to reject by setting PROFANITIES_LIST.

Other setup and tips

Add a reference to and to your with any desired prefix, for example:

(r'^blog/', include('')),
(r'^blogmaker/', include('')),

Comments are moderated using a version of comment_utils. The setup is the same as for comment_utils. For example, to moderate first-time comments with email notification, include this code in your project:

from blogmaker.comments.moderation import ModerateFirstTimers, moderator
from import Entry

class Moderator(ModerateFirstTimers):
    email_notification = True

moderator.register(Entry, Moderator)

See the comment_utils docs for more options. This code must run once when your server starts up. This blog post has some suggestions of where to put startup code.

Note: Blogmaker contains forked copies of both django.contrib.comments and comment_utils. You do not need to install the standard comments and comment_utils applications to use Blogmaker.

Blog entries may be written in straight HTML or using Markdown markup. Blogmaker also defines a few shortcuts in the form %portal%. See expand_shortcuts() in util/ for the full list.

Trackbacks to other blogs are not posted automatically. To post trackbacks, run You may want to run this from a cron job.

View, modify and post trackbacks for an individual blog entry by adding /postTrackbacks/ to the public URL for the entry.

Trackbacks may be posted to a Blogmaker entry using the public URL for the entry with the suffix /trackback/. To reduce trackback spam, any posted trackbacks are validated by fetching the contents of the referring page and verifying that the entry URL appears on the referring page. In addition, trackbacks are comments and may be moderated like any other comment.

Blogmaker Tools

Blogmaker Tools adds a preview option and an improved list view as an alternative to Django's built-in admin site. The tools are accessed from the /tools/ URL.

Other blog applications

There are several other blogging applications for Django: