FeinCMS 1.8 release notes

Welcome to FeinCMS 1.8!

FeinCMS finally got continuous integration

Have a look at the status page here:

Travis CI

Preliminary Python 3.3 support

The testsuite runs through on Python 3.3.

Singleton templates

Templates can be defined to be singletons, which means that those templates can only occur once on a whole site. The page module additionally allows specifying that singleton templates must not have any children, and also that the page cannot be deleted.

Dependencies are automatically installed

Now that distribute and setuptools have merged, setup.py has been converted to use setuptools again which means that all dependencies of FeinCMS should be installed automatically.

Backwards-incompatible changes

  • The template naming and order used in the section content has been changed to be more similar to the media library. The naming is now <mediafile type>_<section content type>, additionally the media file type is considered more important for template resolution than the section content type.
  • The mechanism for finding the best application content match has been massively simplified and also made customizable. The default implementation of ApplicationContent.closest_match now only takes the current language into account.

Removal of deprecated features

  • The module feincms.admin.editor has been removed. Import the classes from feincms.admin.item_editor or feincms.admin.tree_editor directly.
  • The HTML cleansing module feincms.utils.html.cleanse has been removed. Use the standalone package feincms-cleanse instead.
  • Registering extensions using shorthand notation is not possible anymore. Always use the full python path to the extension module.
  • The two navigation template tags feincms_navigation and feincms_navigation_extended have been removed. The improved feincms_nav tag has been introduced with FeinCMS v1.6.
  • The function-based generic views in feincms.views.generic have been removed. The decorator function feincms.views.decorators.add_page_to_extra_context() is therefore obsolete and has also been removed.
  • The old media library content type module feincms.content.medialibrary.models has been replaced with the contents of feincms.content.medialibrary.v2. The model field position has been renamed to type, instead of POSITION_CHOICES you should use TYPE_CHOICES now. The code has been simplified and hacks to imitate raw_id_fields have been replaced by working stock code. The v2 module will stay around for another release and will be removed in FeinCMS v1.8. The now-unused template admin/content/mediafile/init.html has been deleted.
  • Page.setup_request() has been removed because it has not been doing anything for some time now.

New deprecations

  • Page extensions should start explicitly adding their fields to the administration interface using modeladmin.add_extension_options. FeinCMS v1.8 will warn about fields collected automatically, the next release will not add unknown fields to the administration interface anymore.
  • All extensions should inherit from feincms.extensions.Extension. Support for register(cls, admin_cls)-style functions will be removed in FeinCMS v1.9.

Notable features and improvements

  • The template tags feincms_render_region and feincms_render_content do not require a request object anymore. If you omit the request parameter, the request will not be passed to the render() methods.
  • The code is mostly flake8 clean.
  • The new management command medialibrary_orphans can be used to find files which aren’t referenced in the media library anymore.
  • The test suite has been moved into its own top-level module.


  • The item and tree editor finally take Django permissions into account.
  • The datepublisher response processor should not crash during daylight savings time changes anymore.
  • The undocumented attribute PageAdmin.unknown_fields has been removed because it was modified at class level and not instance level which made reuse harder than necessary.

Compatibility with Django and other apps

FeinCMS 1.8 requires Django 1.4 or better. The testsuite is successfully run against Django 1.4, 1.5 and 1.6. Django 1.7 is not supported.