Django-CMS plugins for django-blog-zinnia

django, blog, weblog, zinnia, cms, plugins, apphook
pip install emencia-cmsplugin-zinnia==



Cmsplugin-zinnia is a bridge between django-blog-zinnia and django-cms.

This package provides plugins, menus and apphook to integrate your Zinnia powered Weblog into your django-cms Web site.

The code bundled in this application is a copy of the original zinnia.plugins module, made for forward compatibility with django-blog-zinnia > 0.11.


This is a fork of original cmsplugin-zinnia to be able to release an alternative package to fix compatibility issues with DjangoCMS>=3.4.


Once Zinnia and the CMS are installed, you simply have to register cmsplugin_zinnia, in the INSTALLED_APPS section of your project's settings.

Entries with plugins

If you want to use the plugin system of django-cms in your entries, an extended Entry with a PlaceholderField is provided in this package.

Just add this line in your project's settings to use it.

ZINNIA_ENTRY_BASE_MODEL = 'cmsplugin_zinnia.placeholder.EntryPlaceholder'


You have to keep in mind that the default migrations bundled with Zinnia do not reflect the addition made by the EntryPlaceholder model.

A solution to initialize correctly the database can be:

$ python manage.py makemigrations
$ python manage.py migrate

Tips for using the apphook

If you want to use the apphook to provide the blog functionnalities under a specific URL handled by the CMS, remember this tip:

  • Once the apphook is registered, you can remove the inclusion of 'zinnia.urls' in urls.py and then restart the server to see it in full effect.



Default value: ['zinnia.urls']

The URLsets used for by the Zinnia AppHook.


Default value:


List of strings representing the path to the Menu class provided by the Zinnia AppHook.


Default value: True

Boolean used for displaying or not the entries in the EntryMenu object.


Default value: [] (Empty list)

List of tuple for extending the plugins rendering templates.


  ('entry_custom.html', 'Entry custom'),
  ('entry_custom_bis.html', 'Entry custom bis')


Default value:

[('cmsplugin_zinnia/entry_list.html', _('Entry list (default)')),
 ('cmsplugin_zinnia/entry_detail.html', _('Entry detailed')),
 ('cmsplugin_zinnia/entry_slider.html', _('Entry slider'))]

Available base templates, these are the shipped template from this application. Commonly you will prefer to use CMSPLUGIN_ZINNIA_TEMPLATES to add new templates.


Default value: None

Initial value for template_to_render field. If empty or undefined, initial value will be the first item of available template choices.


Fixed compatibility with Django>=2.0. Validated as working with Django==2.1.8, django-cms==3.6.0 and django-blog-zinnia==0.20.

Fixed template_to_render field missing a default value that could result to broken page when no template was selected at plugin creation.

  • Past migrations have been modified to clean them from any hardcoded choices that triggered warning message about changed model needing new migration when you added new template choices;
  • Added data migration to fix plugins entries with empty value for template_to_render fields, they will be filled with defaut template;
  • template_to_render fields can no longer be empty, select input do not show anymore option for empty value;

Everything is backward compatible. After updating you will just need to perform migration for cmsplugin_zinnia app.

Fixed CMSLatestEntriesPlugin and CMSSelectedEntriesPlugin to use selected template to render instead of default plugin one.

Renamed cms_toolbar.py to cms_toolbars.py so Zinnia application appear again in CMS toolbar.


Fixed compatibility with DjangoCMS>=3.4:


  • Remove warnings with Django 1.9


  • Compatibility with Django 1.8


  • PlaceholderEntry mixin
  • Compatibility with Django 1.7 and Zinnia 0.15


  • Compatibility with Django-CMS 3.0


  • Python 3 compatibility fix
  • Better help texts and legends


  • Archives plugin
  • Tag cloud plugin
  • Author list plugin
  • Categories plugins
  • Featured entries filter
  • Offset for latest entries
  • Documentation improvements
  • Configurable apphook's urls
  • Support custom auth.User model
  • Fix translations of the plugins
  • Fix HTML rendering without context
  • Compatibility with Django v1.5
  • Compatibility with Zinnia v0.13
  • Updating the buildout installation


  • Compatibility fix for Django-CMS 2.2+


  • Fix issues with Entry.content rendering.
  • Compatibility with latest version of Zinnia.


  • Calendar plugin.
  • QueryEntries plugin.
  • Slider template for plugins.
  • Documentation improvements.
  • Fix breadcrumbs with month abbrev.
  • Compatibility with Django 1.4 and Django-CMS 2.3.


  • Better demo.
  • Renaming modules.
  • Fix dependancies with mptt.
  • Fix EntryPlaceholder's Meta.
  • 0 means all the entries on plugins.
  • Set menu Nodes to invisible instead of removing.


  • Initial release based on zinnia.plugins.