This fork of zinnia adds django-tinymce support. If tinymce is in your installed applications, it will be used instead of the default wymeditor. You'll need to install TinyMCE and django-tinymce to use this option.
JavaScript Python Other
Switch branches/tags
Nothing to show
Pull request Compare This branch is 1 commit ahead, 2967 commits behind Fantomas42:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Django Blog Zinnia

Simple yet powerful application for managing a blog within your Django website.

Zinnia has been made for publishing weblog entries and is designed to do it well.

Basically any feature that can be provided by another reusable app has been left out. Why should we re-implement something that is already done and reviewed by others and tested.


Main features :

  • Comments
  • Sitemaps
  • RSS Feeds
  • Search engine
  • Archives views
  • Related entries
  • Tags and categories views
  • Prepublication and expiration
  • Widgets (Popular entries, Similar entries, ...)
  • Spam protection with Akismet
  • Ping Directories
  • support
  • Twitter support
  • Gravatar support
  • WYMeditor or TinyMCE
  • Django-cms plugins
  • Collaborative work
  • Tags autocompletion
  • Ready to use and extendables templates


Make sure to install these packages prior to installation :


You could retrieve the last sources from and run the installation script

$> python install

or use pip

$> pip install -e git://

For the latest stable version use easy_install

$> easy_install django-blog-zinnia


Then register zinnia, and these following applications in the INSTALLED_APPS section of your project's settings.

...   # Your favorites apps
...   'django.contrib.contenttypes',
...   'django.contrib.comments',
...   'django.contrib.sites',
...   'django.contrib.admin',
...   'tagging',
...   'zinnia',)


Follow the django-tinymce instructions at:

Template Context Processors

Add these following template context processors if not already present.

...      'django.core.context_processors.auth',
...      'django.core.context_processors.i18n',
...      'django.core.context_processors.request',
...      '',
...      '',
...      'zinnia.context_processors.version',# Optionnal
...   )

Media Files

You have to make a symbolic link from zinnia/media/zinnia directory to your media directory or make a copy named zinnia, but if want to change this value, define ZINNIA_MEDIA_URL in the as appropriate.

And don't forget to serve this url.


Add the following lines to your project's in order to display the blog.

>>> url(r'^weblog/', include('zinnia.urls')),
>>> url(r'^comments/', include('django.contrib.comments.urls')),

Note that the default zinnia urlset is provided for convenient usage, but you can customize your urls if you want. Here's how :

>>> url(r'^weblog/feeds/', include('zinnia.urls.feeds')),
>>> url(r'^weblog/authors/', include('zinnia.urls.authors')),
>>> url(r'^weblog/categories/', include('zinnia.urls.categories')),
>>> url(r'^weblog/search/', include('')),
>>> url(r'^weblog/', include('zinnia.urls.entries')),
>>> url(r'^comments/', include('django.contrib.comments.urls')),

Advanced Configuration


One of the cool features of Django is the sitemap application, so if you want to fill your website's sitemap with the entries of your blog, follow these steps.

  • Register django.contrib.sitemaps in the INSTALLED_APPS section.
  • Edit your project's urls and add this code :
>>> from zinnia.sitemaps import TagSitemap
>>> from zinnia.sitemaps import EntrySitemap
>>> from zinnia.sitemaps import CategorySitemap
>>> from zinnia.sitemaps import AuthorSitemap
>>> sitemaps = {'tags': TagSitemap,
...             'blog': EntrySitemap,
...             'authors': AuthorSitemap,
...             'categories': CategorySitemap,}
>>> urlpatterns += patterns('django.contrib.sitemaps.views',
...                         (r'^sitemap.xml$', 'index',
...                          {'sitemaps': sitemaps}),
...                         (r'^sitemap-(?P<section>.+)\.xml$', 'sitemap',
...                          {'sitemaps': sitemaps}),
...                         )


By default the Akismet spam protection is enabled when anyone leaves a comment.

IMPORTANT : you need an API key. If you don't have any, get one for free at then set it in your project's settings like this :

>>> AKISMET_API_KEY = 'your key'

If you don't want spam protection for comments, you can disable it with this setting.


You find useful and want to use it for your blog entries ?

It's simple, install django_bitly in your project's settings and add these settings.

>>> BITLY_LOGIN = 'your login'
>>> BITLY_API_KEY = 'your api key'

Zinnia will do the rest.


When you post a new entry on your blog you might want to tweet it as well.

In order to do that, you first need to activate the support like described above.

Then install python-twitter and add these settings.

>>> TWITTER_USER = 'your twitter username'
>>> TWITTER_PASSWORD = 'your twitter password'

Now in admin, you have the possibilty to post an update containing your entry's title and the shortened url of your entry.


If you use django-cms, Zinnia can be integrated into your pages, thanks to the plugin system.

Simply register zinnia.plugins in the INSTALLED_APPS section of your project's settings.


Zinnia provides several templatetags to create some widgets in your website's templates.

  • get_recent_entries [number=5]

Display the latest entries.

  • get_random_entries [number=5]

Display random entries.

  • get_popular_entries [number=5]

Display popular entries.

  • get_similar_entries [number=5]

Display entries similar to an existing entry.

  • get_calendar_entries [year, month]

Display an HTML calendar with date of publications.

  • get_categories

Display all the categories available.

  • get_archives_entries

Display the archives by month.

  • get_link_archives_entries

Display link markups for listing the archives.

  • zinnia_breadcrumbs [separator="/" [root_name="Blog"]]


A Buildout script is provided to properly initialize the project for anybody who wants to contribute to the project.

First of all, please use VirtualEnv to protect your system.

Follow these steps to start the development :

$> git clone git://
$> virtualenv --no-site-packages django-blog-zinnia
$> cd django-blog-zinnia
$> source ./bin/activate
$> python
$> ./bin/buildout

The buildout script will resolve all the dependancies needed to develop the application.

Once these operations are done, you are ready to develop the zinnia project.

Run this command to launch the tests.

$> ./bin/test

Pretty easy no ?


If you want to contribute by updating a translation or adding a translation in your language, it's simple, create a account on and you will have the possibility to edit the translations at this url :


If you are a proud user of Zinnia, send me the url of your website and I will add it to the list.