FeinCMS 1.5 release notes

Explicit reversing of URLs from ApplicationContent-embedded apps

URLs from third party apps embedded via ApplicationContent have been traditionally made reversable by an ugly monkey patch of django.core.urlresolvers.reverse. This mechanism has been deprecated and will be removed in future FeinCMS versions. To reverse an URL of a blog entry, instead of this:

# deprecated
from django.core.urlresolvers import reverse
reverse('blog.urls/blog_detail', kwargs={'year': 2011, 'slug': 'some-slug'})

do this:

from feincms.content.application.models import app_reverse
app_reverse('blog_detail', 'blog.urls', kwargs={'year': 2011, 'slug': 'some-slug'})

If you do not want to use the monkey patching behavior anymore, set FEINCMS_REVERSE_MONKEY_PATCH = False in your settings file.

The new method is accessible inside a template too:

{% load applicationcontent_tags %}

{# You have to quote the view name and the URLconf as in Django's future {% url %} tag. #}
{% app_reverse "blog_detail" "blog.urls" year=2011 slug='some-slug' %}

Inheritance 2.0

It’s possible to use Django’s template inheritance from third party applications embedded through ApplicationContent too. To use this facility, all you have to do is return a tuple consisting of the template and the context. Instead of:

def my_view(request):
    # ...
    return render_to_response('template.html', {'object': ...})

simply use:

def my_view(request):
    # ...
    return 'template.html', {'object': ...}


template.html should extend a base template now.

Better support of InlineModelAdmin options for content types

The FeinCMSInline only differs from a stock StackedInline in differing defaults of form, extra and fk_name. All inline options should be supported now, especially raw_id_fields and fieldsets.

Minor changes

  • The main CMS view is now based on Django’s class-based generic views. Inheritance 2.0 will not work with the old views. You don’t have to do anything if you use feincms.urls (as is recommended).
  • Request and response processors have been moved out of the Page class into their own module, feincms.module.page.processors. They are still accessible for some time at the old place.
  • django.contrib.staticfiles is now a mandatory dependency for the administration interface.
  • The active and in_navigation booleans on the Page class now default to True.
  • The minimum version requirements have changed. Django versions older than 1.3 aren’t supported anymore, django-mptt must be 0.4 upwards.
  • The mptt tree rebuilders have been removed; django-mptt offers tree rebuilding functionality itself.
  • django-queryset-transform has been imported under feincms.utils and is used for speeding up various aspects of the media library. The prefilled attributes have been deprecated, because django-queryset-transform can be used to do everything they did, and better.
  • PageManager.active_filters has been converted from a list to a SortedDict. This means that replacing or removing individual filters has become much easier than before. If you only used the public methods for registering new filters you don’t have to change anything.
  • The same has been done with the request and response processors.
  • The TemplateContent has been changed to use the filesystem and the app_directories template loaders directly. It can be used together with the cached template loader now.
  • The tree editor has received a few usability fixes with (hopefully) more to come.
  • Page.setup_request can be called repeatedly without harm now. The return value of the first call is cached and returned on subsequent calls which means that request processors are run at most once.
  • Extensions such as translations and datepublisher which were only usable with the page module have been made more generic and are available for other FeinCMS-derived models too.
  • Media files from the medialibrary can be exported and imported in bulk.
  • When creating a new translation of a page, content is only copied from the original translation when the new page does not have any content yet. Furthermore the user is notified that some content-copying has happened.
  • A few bugs have been fixed.