Skip to main content
Warning: You are using the test version of PyPI. This is a pre-production deployment of Warehouse. Changes made here affect the production instance of TestPyPI (
Help us improve Python packaging - Donate today!
Project Description

This is a plugin "system" (really just two) for making "single-page scroller"
websites super easy.

It provides a Section Container plugin and a generic Section plugin out of the
box. Section Containers allow Section plugins to be added inside them. Section
plugins will allow anything inside them, but have some basic configuration of
their own, namely:

1. Title - The title of the section;

2. Show title - If unchecked, will not emit a heading for the section;

3. Label - A menu title for the section. This is by default identical to the
title, but allows for a menu label different than the section title;

4. Show in menu - If unchecked, this section will not appear in the menu.

5. Slug - a slug. If left blank, will be derived from the title.

The Section Container will render all of its children plugins, but first, it
will emit basic menu markup of the contained sections.

Now your operators can move sections around, and the in-page menu will stay up
to date.

For your section-linking convenience, each Section plugin will also emit links
to the previous and next sections, if present.

You will need to provide some CSS styling and possibly some JS for nice,
smooth, intra-page link scrolling. I use something like this in my projects
that use jQuery:

```` Javascript
// Provide graceful scrolling around the page
$("").on('click', 'a', function(evt) {
var $this = $(this),
target = $this.attr('href');

if (target[0] === '#') {
'scrollTop': $(target).offset().top
}, 800, 'swing');


`pip install cmsplugin-sections-working`

Then, add 'cmsplugin_sections' to your INSTALLED_APPS.

If using Django 1.7, then add:

'cmsplugin_sections': 'cmsplugin_sections.migrations_django'



1. Add a Section Container plugin to the page;
2. Add one or more Section plugins into the Section Container;
3. Add content to each Section plugin as per usual;
4. Style with CSS to suite your needs;
5. Optionally add the above JS to your project to provide smooth scrolling
between sections;
6. Optionally override or extend the provided templates to further suite your


In most cases, you could easily just create normal CMS Plugins which can then
be added to a Section plugin to get the variety of content you wish your
operators to choose from. However, there may be some cases where it makes
sense to just create a custom Section plugin.

Both the Section Container and the Section plugin were built in a manner that
provides easy extention via subclassing a "base" plugin and a "base" plugin
model. This makes it pretty straightforward to create your own, pluggable
sections types for your operators.

If you plan to create your own, custom Sections for your project, your
`` might looks something like this:

```` python
from django.db import models
from cmsplugin_sections.models import AbstractSectionBasePluginModel

class SplashSectionPluginModel(AbstractSectionBasePluginModel):
# Include project-specific Section Plugin configuration here. Or not. See
# note below.



If is entirely optional to create your own pluginmodel if you don't need
to add configuration options. You *could* just use the provided one, but,
if you ever change your mind, it will be rather complicated to migrate any
existing Section plugins to your new model. If instead you create an
intermediate base class like the one shown above, even if its body is
simply: `pass`, you will thank yourself in the future when you decide to
add a configuration parameter to any existing sections of this type.

Your `` might look like this:

```` python
from cmsplugin_sections.cms_plugins import BaseSectionPlugin
# Assumes and are at the same level in your project.
from .models import SplashSectionPluginModel

class SplashSectionPlugin(BaseSectionPlugin):

# Many of these options are configurable. See source for hints.
cache = True
model = SplashSectionPluginModel
name = 'Splash Section'
render_template = "YOUR_APP/splash_section.html"

def render_plugin(self, context, instance, placeholder):
# Do your own thing here ...
return context

Release History

Release History

This version
History Node


Download Files

Download Files

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

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
cmsplugin_sections-0.0.2.tar.gz (9.1 kB) Copy SHA256 Checksum SHA256 Source Sep 7, 2016

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting