Allows you to add and edit custom named menus similar to Wordpress menus
Project description
Django CMS Named Menus
An extension for Django CMS that allows you to create multiple menus like Wordpress
Replaces Previous Versions
This replaces the previous versions by Ryan Bagwell and Rogerio Carrasqueira which are no longer actively updated
Originally forked from:
- https://github.com/rgcarrasqueira/django-cms-named-menus
- https://github.com/ryanbagwell/django-cms-named-menus
Installation
-
Install with pip
pip install djangocms-named-menus -
Add
cms_named_menusto INSTALLED_APPS -
Run migrations
python manage.py migrate
Upgrading from Previous Version
-
Uninstall previous version with pip
pip uninstall -y django-cms-named-menus -
The migrations and code will pick up previous versions correctly.
Usage
After installation, place the {% show_named_menu 'MenuName' %} template tag where you want your menu to appear.
{% load named_cms_menu_tags %}
<ul>
{% show_named_menu "Main Menu" %}
</ul>
Next, create your menu in the admin area using the drag and drop interface. Drag items with child menu items:
Drag items without child menu items:
Settings
The following settings can be changed by adding to your project's settings.py file:
- Override the default cache duration for Named Menus, default = 3600 seconds
CMS_NAMED_MENUS_CACHE_DURATION = 3600
- Set the application namespaces that can be used with Named Menus as a list, default is CMS pages only - as the page id will not be unique for other applications e.g. Aldryn NewsBlog etc. (default = ['CMSMenu',])
CMS_NAMED_MENUS_NAMESPACES = ['CMSMenu',]
or to allow ALL namespaces:
CMS_NAMED_MENUS_NAMESPACES = None
- Automatically remove pages that have been unpublished, deleted, or removed from Navigation (default = True)
CMS_NAMED_MENUS_REMOVE_UNAVAILABLE_PAGES = True
Testing
Install test dependencies
pip install -e ".[test]"
This installs the package in editable mode along with test dependencies:
djangocms-text-ckeditordjango-sekizai
Run tests
python -m django test tests --settings=tests.settings
For verbose output:
python -m django test tests --settings=tests.settings -v 2
Tests use an in-memory SQLite database and cover:
- Model creation,
__str__, auto-slug generation, and JSONField storage unique_togetherconstraint on(slug, site)and AutoSlugField deduplication- Cache utilities (
flatten_menu,contains_page, key formatting) - Cache operations (
set,get,delete,delete_many) - Admin helpers (
get_all_available_ids,clean_menu,SimpleNode,LazyEncoder) - Default settings values (
CACHE_DURATION,ALLOWED_NAMESPACES) - Signal-based cache invalidation on menu save and delete
- Admin views (changelist, add form, change form, site-filtered listing)
- JSONField migration verification (store/retrieve list, empty list, null)
Note: The
test_filter_by_json_contenttest is automatically skipped on SQLite ascontainslookups require PostgreSQL or MariaDB 10.2.3+.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters