Skip to main content

A simple, flexible, and extensible navigation menu for Django.

Project description

django-simple-nav

PyPI PyPI - Python Version Django Version

Define your navigation in Python, render it in templates. django-simple-nav handles URL resolution, active state detection, and permission filtering so your nav stays in sync with your project.

Requirements

  • Python 3.10, 3.11, 3.12, 3.13, 3.14
  • Django 4.2, 5.2, 6.0

Installation

uv add django-simple-nav
# or
python -m pip install django-simple-nav

Add django_simple_nav to your INSTALLED_APPS:

INSTALLED_APPS = [
    # ...,
    "django_simple_nav",
    # ...,
]

Getting Started

Define your navigation in a Python file. items is what gets rendered, and template_name points to the template that controls the markup:

# config/nav.py
from django_simple_nav.nav import Nav
from django_simple_nav.nav import NavGroup
from django_simple_nav.nav import NavItem


class MainNav(Nav):
    template_name = "main_nav.html"
    items = [
        NavItem(title="Home", url="/"),
        NavItem(title="About", url="/about/"),
        NavGroup(
            title="Resources",
            items=[
                NavItem(title="Blog", url="/blog/"),
                NavItem(title="Contact", url="/contact/"),
            ],
        ),
    ]

Create main_nav.html. The template receives the items defined above — each has a title, url, active state, and groups have nested items:

<!-- main_nav.html -->
<nav>
  <ul>
    {% for item in items %}
      <li>
        <a href="{{ item.url }}"{% if item.active %} class="active"{% endif %}>
          {{ item.title }}
        </a>
        {% if item.items %}
          <ul>
            {% for subitem in item.items %}
              <li>
                <a href="{{ subitem.url }}"{% if subitem.active %} class="active"{% endif %}>
                  {{ subitem.title }}
                </a>
              </li>
            {% endfor %}
          </ul>
        {% endif %}
      </li>
    {% endfor %}
  </ul>
</nav>

Then use the template tag wherever you want the nav to appear. The string is the import path to your Nav class:

{% load django_simple_nav %}

{% django_simple_nav "config.nav.MainNav" %}

Examples

The example directory contains a simple Django project that demonstrates how to use django-simple-nav, including navigation definitions for a few different scenarios and some popular CSS frameworks.

git clone https://github.com/westerveltco/django-simple-nav
cd django-simple-nav
uv sync
uv run example/demo.py runserver

Then open your browser to http://localhost:8000.

Documentation

For the full documentation — including permissions, extra context, Jinja2 support, self-rendering items, and more — please visit the documentation site.

License

django-simple-nav is licensed under the MIT license. See the LICENSE file for more information.

Project details


Download files

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

Source Distribution

django_simple_nav-0.14.0.tar.gz (10.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_simple_nav-0.14.0-py3-none-any.whl (12.4 kB view details)

Uploaded Python 3

File details

Details for the file django_simple_nav-0.14.0.tar.gz.

File metadata

  • Download URL: django_simple_nav-0.14.0.tar.gz
  • Upload date:
  • Size: 10.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for django_simple_nav-0.14.0.tar.gz
Algorithm Hash digest
SHA256 0cece60bc0692adc2dbda651dcd201e7ddcf2574601f9f08044590a7f1c502f6
MD5 b0bdd3ebb6e7d0b2234e6743e4c066be
BLAKE2b-256 7f96ca52735a966431b6797ee7240abf71153e7d0ab104dc61d9c5abbf5f696f

See more details on using hashes here.

Provenance

The following attestation bundles were made for django_simple_nav-0.14.0.tar.gz:

Publisher: release.yml on westerveltco/django-simple-nav

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file django_simple_nav-0.14.0-py3-none-any.whl.

File metadata

File hashes

Hashes for django_simple_nav-0.14.0-py3-none-any.whl
Algorithm Hash digest
SHA256 743d23516ba41da9097be1242d180b1181a6f8afd22501c008be391968756041
MD5 dfb02b23056a15f0aad57897af9af403
BLAKE2b-256 23043f038405dc97e2c91f0784418d2cf1aee35723680ac25719a6404d261b7b

See more details on using hashes here.

Provenance

The following attestation bundles were made for django_simple_nav-0.14.0-py3-none-any.whl:

Publisher: release.yml on westerveltco/django-simple-nav

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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