djangocms-stories-agenda: a lightweight, flexible event system for Django CMS
Django CMS has many strengths, but we encountered a few limitations while creating websites for our clients, one of them is the lack of an efficient agenda/event package. On the other hand, the blog system provided by djangocms-stories is powerful, extensible, and widely used.
From this observation comes djangocms-stories-agenda, an extension to the existing blog infrastructure into a fully functional event system.
What does djangocms-stories-agenda do?
This extension allows you to display upcoming events within a Django CMS setup based on djangocms-stories.
It reuses the familiar blog structure and adds everything needed to represent events instead of articles.
In practice, a "post" becomes an event when it is created on a special blog instance (more on this in the installation guide below). The events are listed in a dedicated agenda view, which lists all upcoming events (start_date < now < end_date), and optionally also lists past events (start_date < end_date < now).
What does the extension provide?
djangocms-stories-agenda adds a few fields required for any event management workflow:
- Start date
- End date
- Recurrence (weekly, monthly, etc.)
- Pin on top of the agenda
With these additions, the blog becomes a flexible event system that handles both simple and recurring events:
The fields added by the extension on post instances linked to an agenda stories configuration.
Why does this extension exist?
Because there is no reliable, modern, and CMS-integrated event module for Django CMS.
Instead of reinventing a full agenda system, djangocms-stories-agenda builds on what already works:
- a mature blog system,
- familiar editorial workflows,
- taxonomy, metadata, and layout options,
- and especially, the built-in extension API of djangocms-stories.
The result is a clean, maintainable approach that avoids duplicating features that the blog already implements well.
How does it work?
The module plugs directly into the djangocms-stories extension mechanism, enriching the blog model with extra fields for event metadata.
It also provides:
- Custom views for displaying upcoming events (with or without expired events),
- CMS plugins for embedding event lists into any page,
- A patched URL configuration to route event instance through event views.
This makes it a natural, seamless addition to any project already using Django CMS and djangocms-stories.
Installation & Setup Guide
Follow these steps to install and configure djangocms-stories-agenda in your project.
1. Install the package
pip install djangocms-stories-agenda
2. Add the required apps to INSTALLED_APPS
INSTALLED_APPS = [
...
"djangocms_stories_agenda",
"recurrence",
]
3. Apply the migrations
python3 manage.py migrate djangocms_stories_agenda
4. Patch the blog URL configuration
In your Django settings:
BLOG_URLCONF = "djangocms_stories_agenda.patched_urls"
5. Create a new Blog Configuration in the Django CMS admin
Go to Administration "djangocms-stories" Stories Configurations, then create a new configuration:
- Instance namespace: anything you want
- Application title: anything you want
- Object name: anything you want
- (fill other fields as usual)
- Then click Layout (Show), and set:
- Template prefix:
djangocms_stories_agenda.
This ensures that the event templates and views provided by the extension are used.
There are other optional settings that you can set to customize the behavior of the extension, you can find them in the README.
Kapt is a small French web development agency specializing in the creation of robust, tailor-made websites using Django and Django CMS. The company also develops and maintains open source modules and contributes to various Django packages. Kapt also attaches great importance to aligning its work with its values, in particular by incorporating eco-design principles wherever possible.