### Navigation

- index
- modules |
- next |
- FeinCMS 1.7.4 documentation »

# FeinCMS - An extensible Django-based CMS

FeinCMS is an extremely stupid content management system. It knows nothing about content – just enough to create an admin interface for your own page content types. It lets you reorder page content blocks using a drag-drop interface, and you can add as many content blocks to a region (f.e. the sidebar, the main content region or something else which I haven’t thought of yet). It provides helper functions, which provide ordered lists of page content blocks. That’s all.

Adding your own content types is extremely easy. Do you like textile that much, that you’d rather die than using a rich text editor? Then add the following code to your project, and you can go on using the CMS without being forced to use whatever the developers deemed best:

    from feincms.module.page.models import Page
    from django.contrib.markup.templatetags.markup import textile
    from django.db import models

    class TextilePageContent(models.Model):
        content = models.TextField()

        class Meta:
            abstract = True

        def render(self, **kwargs):
            return textile(self.content)

    Page.create_content_type(TextilePageContent)

That’s it. Only ten lines of code for your own page content type.

## Contents

- Installation instructions
  - Installation
  - Configuration
- The built-in page module
  - Activating the page module and creating content types
  - Setting up the admin interface
  - Wiring up the views
  - Adding another content type
  - Page extension modules
  - Using page request processors
  - Using page response processors
  - WYSIWYG Editors
  - ETag handling
  - Sitemaps
- Content types - what your page content is built of
  - What is a content type anyway?
  - Rendering contents in your templates
  - Implementing your own content types
  - Customizing the render method for different regions
  - Extra media for content types
  - Influencing request processing through a content type
  - Bundled content types
    - Application content
    - Comments content
    - Contact form content
    - Inline files
    - Inline images
    - Media library integration
    - Raw content
    - Rich text
    - RSS feeds
    - Section content
    - Table content
    - Template content
    - Video inclusion code for youtube, vimeo etc.
  - Restricting a content type to a subset of regions
  - Design considerations for content types
  - Configuring and self-checking content types at creation time
  - Obtaining a concrete content type model
- Extensions
- Administration interfaces
  - The tree editor
    - AJAX checkboxes
  - The item editor
    - Customizing the item editor
    - Customizing the individual content type forms
  - Putting it all together
- Integrating 3rd party apps into your site
  - Default page handler
  - Generic and custom views
  - Integrating 3rd party apps
    - Adapting the 3rd party application for FeinCMS
    - Registering the 3rd party application with FeinCMS’ `ApplicationContent`
    - Writing the models
    - Returning content from views
    - Letting the application content use the full power of Django’s template inheritance
    - More on reversing URLs
    - Additional customization possibilities
    - Letting 3rd party apps define navigation entries
- Media library
  - Configuration
  - Rendering media file contents
  - Media file metadata
- Template tags
  - General template tags
  - Page module-specific template tags
  - Application content template tags
- Database migration support for FeinCMS with South
- Versioning database content with `django-reversion`
- Advanced topics
  - `feincms.models.Base` — CMS base class
  - `feincms.utils` — General utilities
  - Software design considerations
    - About rich text editors
    - Content blocks
  - Performance considerations
    - Denormalization
    - Caching
- Frequently Asked Questions
  - Should I extend the builtin modules and contents, or should I write my own?
  - I run `syncdb` and get a message about missing columns in the page table
- Contributing to the development of FeinCMS
  - Repository branches
- FeinCMS Deprecation Timeline
  - 1.6
  - 1.7
  - 1.8

## API Documentation

- FeinCMS core
  - General functions
  - Base models
- Admin classes
  - ItemEditor
  - TreeEditor
  - FilterSpec classes for `list_filter` customization
- Page module
  - Models
  - Request and response processors
  - Admin classes
  - Sitemap module
  - Extensions
    - Page excerpts
    - Navigation extensions
    - Related pages
    - Symlinked page content
    - Flexible page titles
  - Extensions not specific to the page module
    - Creation and modification timestamps
    - Content type count denormalization
    - Date-based publishing
    - Featured items
    - Search engine optimization fields
    - Translations
- Media library
  - Models
  - Admin classes
  - Fields
- Blog module
  - Extensions
    - Tagging
    - Blog entry translations
- Content types
  - ApplicationContent
  - CommentsContent
  - ContactFormContent
  - FileContent
  - ImageContent
  - MediaFileContent
  - RawContent
  - RichTextContent
  - RSSContent
  - SectionContent
  - TableContent
  - TemplateContent
  - VideoContent
- Context processors
- Contrib
  - Model and form fields
  - Tagging
- Settings
- Shortcuts
- Template tags
  - FeinCMS tags
  - Thumbnail filters
  - Page-module specific tags
  - `ApplicationContent` tags
- Translations
- Utilities
  - HTML utilities
  - Template tag helpers
- Views and decorators
  - Generic-views replacements
  - Decorators
- Management commands
  - Database schema checker
  - Content-type specific management commands
    - `update_rsscontent`
  - Page tree rebuilders
    - `rebuild_mptt`
  - Miscellaneous commands
    - `feincms_validate`

## Releases

- FeinCMS 1.7 release notes
- FeinCMS 1.6 release notes
- FeinCMS 1.5 release notes
- FeinCMS 1.4 release notes
- FeinCMS 1.3 release notes
- FeinCMS 1.2 release notes

## Indices and tables

- Index
- Module Index
- Search Page

### Navigation

- index
- modules |
- next |
- FeinCMS 1.7.4 documentation »