FeinCMS 1.11 release notes

Welcome to FeinCMS 1.11!

Template inheritance with application contents

FeinCMS adds a decorator and a TemplateResponse subclass which can be returned from apps embedded through ApplicationContent. The template response’s template will override the template used by FeinCMS’ main view and the context will be merged. A selection of HTTP response headers (currently Cache-Control, Last-Modified and Expires) will also be copied to the main response. The following two examples are fully equivalent:

from django.template.response import TemplateResponse
from feincms.content.application.models import UnpackTemplateResponse
from feincms.views.decorators import unpack

def app_detail(request, ...):
    return TemplateResponse(request, 'template.html', {...})

# or

def app_detail(request, ...):
    return UnpackTemplateResponse(request, 'template.html', {...})

The response class can also be easily used with Django’s class-based views:

class MyListView(generic.ListView):
    response_class = UnpackTemplateResponse

This mechanism supersedes returning a tuple of (template_name, context). This is still supported, but lacks the possibility to override HTTP response headers.

Explicit definition of navigation extensions is now possible

The auto-discovery of navigation extensions always was fragile and had to happen before the navigation extension itself was registered with the page class. This has been fixed; it’s now possible to explicitly define the list of navigation extensions which should be available:

from feincms.module.page.extensions import navigation
from feincms.module.page.models import Page
from myapp.navigation_extensions import MyappNavigationExtension

class NavigationExtension(navigation.Extension):
    navigation_extensions = [


The previous method has been deprecated and will stop working in future versions of FeinCMS.

Backwards-incompatible changes

  • FeinCMS requires a minimum of Django 1.6.
  • The example project has been removed, because it did not really demonstrate a best practices FeinCMS setup. A standard installation of FeinCMS will often include additional libraries such as feincms-oembed, form-designer and additional modules.

Removal of deprecated features

There were no deprecated features to be removed.

New deprecations

  • RSSContent and update_rsscontent have been deprecated, those being the only reason why FeinCMS depends on feedparser. This will allow us to remove this dependency. Users should switch to feincms-syndication instead.
  • The automatic discovery of subclasses of NavigationExtension has been replaced with an explicit mechanism of defining navigation extensions.
  • Page.cache_key has never been used by FeinCMS itself and will therefore be removed in a future release. Comparable functionality has been available for a long time with Page.path_to_cache_key.

Notable features and improvements

  • Fix the inconsistent filtering of pages inside feincms_nav. Navigation extensions always came last, but the last release of FeinCMS added navigation group filtering afterwards. This has been fixed. The workaround for the previous behavior was to add the matching navigation group to page pretenders as well.
  • Support for importing PIL as import Image has been removed.
  • The builtin and mostly broken frontend editing support has been removed. This is not a decision against frontend editing / on site editing in general, it is more about creating a space for new ideas and new implementations.
  • The home-grown schema checking support has been removed. Real migrations should be used instead.
  • We are logging more stuff.
  • The admin CSS has been updated in preparation for Django’s (hopefully!) upcoming django-flat-theme merge.


  • {% feincms_nav %} now filters by navigation group before applying navigation extensions for internal consistency.
  • {% page_is_active %} correctly handles page pretenders now.

Compatibility with Django and other apps

FeinCMS 1.11 requires Django 1.6 or better.