Skip to main content

Collection of extendible plugins for django-CMS to create and edit widgets in a simple manner

Project description

djangocms-cascade

Build Status Python versions Software license Gitter chat room Latest version on PyPI

DjangoCMS-Cascade is the Swiss army knife for working with Django-CMS plugins.

Why Use DjangoCMS-Cascade?

DjangoCMS-Cascade is a collection of plugins for Django-CMS placeholders. Instead of creating one database model for each CMS plugin, Cascade shares one database model for all of them. The payload then is stored inside a JSON field instead of declaring each attribute explicitly. This furthermore prevents us to handle all kind of nasty database migration problems.

Breaking News

  • Version 0.15 adds a feature to integrate documentation generated by Sphinx.

  • Version 0.14.4 supports Django-1.11 in combination with django-CMS 3.4.5

Perfect for nested grid systems

Since Cascade keeps track on the widths of all columns, <img> and <picture> elements can be rendered in a responsive way, so that the browser only loads the image required for the visible viewport.

Extend plugins with additional features

Using a JSON field to store the payload gives us much more flexibility. We can for instance enrich our plugins with additional attributes, configured during runtime. This can be used to optionally share attributes across different plugins (referenced by an alias name), add CSS classes and styles, or offer alternative rendering templates.

Copy content and paste it somewhere else

Since the payload of plugins is already serialized, we can even copy them from one site to another site supporting djangocms-cascade.

Documentation

Find detailed documentation on ReadTheDocs.

Please see the Release Notes before upgrading from an older version.

Compatibility

Django-CMS 3.4 introduced a bunch of changes in their API. Therefore please follow these releases:

djangocms-cascade 0.11.x has been tested with Django 1.9.x, django-CMS 3.3.x and djangocms-text-ckeditor 3.0.x.

For django-CMS 3.4 and above, please use version 0.12 of djangocms-cascade.

News for version 0.14

Important Please read the release notes, since version 0.14 introduced a new feature:

A nice feature of django-CMS, is to copy the content of a {% placeholder ... %} to the clipboard. In djangocms-cascade this content could be serialized as a JSON dictionary and moved between sites. This for instance was useful for creating content on the staging system and move it to production later.

Since version 0.14 you can paste that serialized data to a file and refer to it using the special templatetag {% render_cascade "path/to/file.json" %}. This allows editors of websites to create pages using the tools provided by django-CMS. Later on, instead of using a CMS page, we can route that URL onto a template view, which then renders that same content using a static representation of the context, bypassing the database.

Since that JSON file can and shall be added into the project’s version control repository, this feature is specially useful, if your deployment workflow requires full functioning pages, working right out of your continuous integration, but without having to (re)create the content on the production site.

Architecture

It’s pluggable

DjangoCMS-Cascade is very modular, keeping its CMS modules in functional groups. These groups have to be activated independently in your settings.py. It also is possible to activate only certain plugins out of a group. One such group is cmsplugin_cascade.bootstrap3, but it could be replaced by a future Bootstrap-4, the Foundation, Angular Material or whatever other CSS framework you prefer.

Configurable individually

Each Cascade plugin can be styled individually. The site-administrator can specify which CSS styles and CSS classes can be added to each plugin. Then the page-editor can pick one of the allowed styles to adopt his elements accordingly.

Reuse your data

Each Cascade plugin can be configured by the site-administrator to share some or all of its data fields. This for instance is handy, to keep references onto external URLs in a central place. Or is can be used to resize all images sharing a cetrain property in one go.

Segment the DOM

It is even possible to group plugins into seperate evaluation contexts. This for instance is used to render different Plugins, depending on whether a user is authenticated or anonymous.

Responsive Images

In modern web development, images must adopt to the column width in which they are rendered. Therefore the <img ...> tag, in addition to the well known src attribute, also accepts additional srcset’s, one for each media query. Here djangocms-cascade calculates the required widths for each image, depending on the current column layout considering all media breakpoints.

This is also implemented for the <picture> element with all of it’s children, normally <source srcset="...">.

It also supports resolutions of more than one physical pixel per logical pixel as found in Retina displays.

Other Features

  • Use the scaffolding technique from the preferred CSS framework to subdivide a placeholder into a grid system.

  • Make full usage of responsive techniques, by allowing stacked to horizontal classes per element.

  • Use styled buttons to add links.

  • Wrap special content into a Jumbotron or a Carousel.

  • Add <img> and <picture> elements in a responsive way, so that more than one image URL points onto the resized sources, one for each viewport using the srcset tags or the <source> elements.

  • Use segmentation to conditionally render parts of the DOM.

  • Temporarily hide a plugin to show up in the DOM.

  • Upload an self composed font from Fontello and use it’s icon in plain text or as framed eye catchers.

  • It is very easy to integrate additional elements from the preferred CSS framework. For instance, implementing the Bootstrap Carousel, requires only 50 lines of Python code and two simple Django templates.

  • Since all the data is stored in JSON, no database migration is required if a field is added, modified or removed from the plugin.

  • Currently Bootstrap-3.x is supported, but other CSS frameworks can be easily added in a pluggable manner.

  • It follows the “batteries included” philosophy, but still remains very modular.

In addition to easily implement any kind of plugin, DjangoCMS-Cascade makes it possible to add reusable helpers. Such a helper enriches a plugin with an additional, configurable functionality:

  • By making some of the plugin fields sharable, one can reuse these values for other plugins of the same kind. This for instance is handy for the image and picture plugin, so that images always are resized to predefined values.

  • By allowing extra fields, one can add an optional id tag, CSS classes and inline styles. This is configurable on a plugin and site base.

  • It is possible to customize the rendering templates shipped with the plugins.

  • Since all data is JSON, you can dump the content of one placeholder and insert it into another one, even on a foreign site. This for instance is useful to transfer pages from the staging site to production.

Help needed

If someone wants to start a subproject for a CSS framework, other than Bootstrap-3.

If you are a native English speaker, please check the documentation for spelling mistakes and grammar, since English not my mother tongue.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

djangocms-cascade-0.15.2.tar.gz (270.6 kB view details)

Uploaded Source

File details

Details for the file djangocms-cascade-0.15.2.tar.gz.

File metadata

File hashes

Hashes for djangocms-cascade-0.15.2.tar.gz
Algorithm Hash digest
SHA256 a1c85fe37594d551fba8f99d2d680ce7f5a6faaeb721fcf26ea867410757beff
MD5 b5cbf044df5853f246d7cad13a262a88
BLAKE2b-256 78017996c686e6388a7351db23012f65304ccbfbaf7b8bfde7016432d8a41081

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page