Skip to main content

Tema Bootstrap 5 per applicazioni Django dell'AGESCI Campania, con palette ufficiale e personalizzazione per branca.

Project description

django-agesci-theme

build License: MIT Python Django Bootstrap uv Version Code style: Black

Tema Bootstrap 5 riusabile per le applicazioni Django dell'AGESCI Campania.

Fornisce un base.html pronto all'uso con header a due barre (barra brand

  • barra ricerca/azioni), sidebar collapsible, footer ridisegnato e una libreria di componenti opzionali (ag_hero, ag_feature_grid, ag_jumbotron e altri 8). Tutto brandizzato con la palette ufficiale del Manuale Immagine Coordinata AGESCI 2011 e con la personalizzazione per branca tramite un singolo parametro.
Ambito Colore dominante data-branca
Generico (default) Blu/Azzurro generico
Capi / Comunità Capi Viola capi
Lupetti/Coccinelle (L/C) Giallo lc
Esploratori/Guide (E/G) Verde eg
Rover/Scolte (R/S) Rosso rs

Il colore viene applicato rimappando le CSS custom properties di Bootstrap, in funzione dell'attributo data-branca sul tag <html>. Nessun ricompilo necessario: basta cambiare una setting.


Installazione

Il pacchetto è disponibile su PyPI.

Con uv (consigliato)

uv add django-agesci-campania-theme

Con pip

pip install django-agesci-campania-theme

Da GitHub (ultima versione non rilasciata)

uv add "git+https://github.com/AGESCI-Campania/django-agesci-campania-theme.git"
pip install "git+https://github.com/AGESCI-Campania/django-agesci-campania-theme.git"

Configurazione

In settings.py:

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

TEMPLATES = [{
    "BACKEND": "django.template.backends.django.DjangoTemplates",
    "DIRS": [],
    "APP_DIRS": True,
    "OPTIONS": {
        "context_processors": [
            # ... quelli di default ...
            "agesci_theme.context_processors.agesci_theme",
        ],
    },
}]

# --- Personalizzazione tema (tutte opzionali) ---
AGESCI_THEME_BRANCA = "generico"      # generico | capi | lc | eg | rs | viola
AGESCI_THEME_NOME = "Zona Vesuvio"     # mostrato in navbar/footer/title
# Navbar con testo scuro: utile per branca chiara (es. lc = giallo)
AGESCI_THEME_NAVBAR_TESTO_SCURO = False

# Loghi/favicon personalizzati (path relativi a STATIC).
# Se omessi usano gli asset AGESCI Campania inclusi nel pacchetto.
# AGESCI_THEME_LOGO_NAVBAR = "mia_app/img/logo_zona.svg"
# AGESCI_THEME_FAVICON_32 = "mia_app/img/favicon32.png"

Assicurati di avere lo static configurato:

STATIC_URL = "static/"
# in produzione:  python manage.py collectstatic

Uso nei template

{% extends "agesci_theme/base.html" %}
{% load agesci_tags %}
{% load agesci_components %}

{% block title %}Home — {{ agesci_theme_nome }}{% endblock %}

{# Nav desktop: icona sopra + etichetta sotto #}
{% block header_nav %}
  <li>
    <a href="/" class="nav-link active">
      <span class="ag-nav-icon">
        <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="currentColor" viewBox="0 0 16 16">
          <path d="M8.354 1.146a.5.5 0 0 0-.708 0l-6 6A.5.5 0 0 0 1.5 7.5v7a.5.5 0 0 0 .5.5h4.5v-5h3v5H14a.5.5 0 0 0 .5-.5v-7a.5.5 0 0 0-.146-.354z"/>
        </svg>
      </span>
      Home
    </a>
  </li>
{% endblock %}

{# Nav mobile (offcanvas) #}
{% block offcanvas_nav %}
  <li><a href="/" class="nav-link active">Home</a></li>
{% endblock %}

{% block content %}
  {% ag_hero title="Benvenuti!" subtitle="Il tema AGESCI è operativo."
             cta_text="Scopri di più" cta_url="/chi-siamo/" %}

  <button class="btn btn-primary">Pulsante in colore branca</button>

  {# Emblema di una Zona Campania #}
  {% emblema_zona "vesuvio" css_class="img-fluid" %}

  {# Badge che segue il colore della branca corrente #}
  <span class="badge {% branca_bg %}">Branca</span>
{% endblock %}

Blocchi disponibili in base.html

Blocco Posizione
title <title> della pagina
extra_head fine <head>
header intera testata (sostituzione completa)
brand_url URL brand nella barra superiore
brand_text testo brand nella barra superiore
header_nav nav desktop con icone (solo ≥ lg)
offcanvas_nav nav mobile nel pannello offcanvas
header_search campo ricerca in barra inferiore
header_actions pulsanti azione in barra inferiore
sidebar sidebar collapsible (vuota = assente)
sidebar_items voci <li> della sidebar
sidebar_user dropdown utente in fondo alla sidebar (default: request.user se autenticato)
main_class classi CSS del <main> (default: container py-4)
messages messaggi Django (alert Bootstrap)
content contenuto principale
footer footer (sostituzione completa)
footer_brand_text testo sotto il logo nel footer
footer_col1_title / footer_col2_title titoli colonne link
footer_col1_links / footer_col2_links voci <li> colonne link
footer_text testo centrale footer (compat. v1)
footer_copyright riga copyright
footer_links link legali (privacy, ecc.)
extra_js script prima di </body>

Layout applicazione (viewport fisso)

Da ≥ 992 px il base.html applica body { height: 100vh; overflow: hidden } e .ag-scroll-area { min-height: 0; overflow-y: auto } tramite il CSS del tema. Il risultato è un layout a viewport fisso: header e sidebar fissi; solo .ag-scroll-area (che contiene <main> + <footer> come fratelli) scorre. Il footer occupa tutta la larghezza dell'area (viewport − sidebar), indipendentemente dal max-width del .container di <main>. Su mobile/tablet (< 992 px) il layout torna al flusso normale.

Breadcrumb

Passa breadcrumb_items dal contesto della view: la breadcrumb compare automaticamente nella barra inferiore dell'header al posto di ricerca/azioni.

# views.py
def my_view(request):
    return render(request, "mia_app/pagina.html", {
        "breadcrumb_items": [
            {"label": "Home",     "url": "/"},
            {"label": "Sezione",  "url": "/sezione/"},
            {"label": "Pagina corrente"},   # ultimo: active, senza url
        ]
    })

In alternativa usa {% ag_breadcrumb items=breadcrumb_items %} nel blocco content.

Icone Bootstrap (opzionale)

Supporto tramite django-bootstrap-icons. Installazione con l'extra icons:

uv add "django-agesci-campania-theme[icons]"
# oppure
pip install "django-agesci-campania-theme[icons]"

Aggiungi in settings.py:

INSTALLED_APPS = [..., "agesci_theme", "django_bootstrap_icons"]

# Consigliato: abilita la cache per non scaricare gli SVG a ogni richiesta
BS_ICONS_CACHE = BASE_DIR / ".bs-icons-cache"

Uso nei template:

{% load bootstrap_icons %}
{% bs_icon "house" %}
{% bs_icon "calendar-event" size="1.5em" %}

Template tag

{% load agesci_tags %}

  • {% emblema_zona "napoli" css_class="..." alt="..." %}<img> dell'emblema di Zona.
  • {% zone_disponibili %} — lista delle chiavi di zona.
  • {% branca_bg %} — classe CSS di sfondo nel colore della branca corrente.

Zone disponibili: caserta, faito, felix, hirpinia, liternum, napoli, poseidonia, salerno, samnium, vesuvio, volturno.

{% load agesci_components %}

11 componenti UI opzionali: {% ag_hero %}, {% ag_feature_card %}, {% ag_feature_grid %}, {% ag_jumbotron %}, {% ag_badge %}, {% ag_button %}, {% ag_breadcrumb %}, {% ag_dropdown %}, {% ag_list_group %}, {% ag_modal_trigger %}, {% ag_masonry_grid %}.

I template sono in agesci_theme/components/ e sono sovrascrivibili. Vedi la documentazione completa.

Classi utility palette

bg-ag-viola, bg-ag-azzurro, bg-ag-giallo-lc, bg-ag-verde-eg, bg-ag-rosso-rs, bg-ag-giallo-oro e i corrispettivi text-ag-*.


Progetto demo

Il repository include un progetto Django di esempio che mostra header, sidebar, footer, componenti opzionali (/components/), palette e zone. Per avviarlo:

# 1. Clona il repository e installa le dipendenze (crea .venv automaticamente)
git clone https://github.com/AGESCI-Campania/django-agesci-campania-theme.git
cd django-agesci-campania-theme
uv sync

# 2. Crea il database e avvia il server
uv run python example_project/manage.py migrate
uv run python example_project/manage.py runserver

Apri http://127.0.0.1:8000/ nel browser.

Il demo include un selettore di branca nella barra dell'header: il dropdown permette di passare in tempo reale tra generico, capi, lc, eg, rs e viola senza ricaricare la pagina, con la scelta persistita in localStorage.


Sviluppo del tema (modificare i colori/SCSS)

Il CSS compilato è già committato, quindi chi installa il pacchetto non ha bisogno di Sass. Serve solo se vuoi modificare lo SCSS.

npm install
npm run build:css      # rigenera agesci.css e agesci.min.css
npm run watch:css      # ricompila live durante lo sviluppo

I sorgenti sono in agesci_theme/static/agesci_theme/scss/: _palette.scss, _branche.scss, _bootstrap-overrides.scss, _header.scss, _sidebar.scss, _footer.scss, _components.scss.

Palette ufficiale

Estratta dal Manuale Immagine Coordinata AGESCI 2011, sez. 7.

Colore Pantone HEX
Viola 527C #7A1E99
Viola scuro 072C #622599
Giallo oro 123C #FFCC1E
Azzurro 279C #6689CC
Giallo L/C 109C #F9D616
Verde E/G 363C #3D8E33
Rosso R/S 032C #EF3340 *

* Il manuale 2011 riporta per il 032C un RGB anomalo (refuso di stampa, confermato): è stato adottato lo standard Pantone 032C. Vedi _palette.scss.

Licenza

Codice sotto licenza MIT. Marchi, emblemi e palette AGESCI restano proprietà dell'Associazione e sono soggetti al regolamento associativo sull'uso del marchio.

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_agesci_campania_theme-2.2.2.tar.gz (1.5 MB view details)

Uploaded Source

Built Distribution

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

django_agesci_campania_theme-2.2.2-py3-none-any.whl (1.5 MB view details)

Uploaded Python 3

File details

Details for the file django_agesci_campania_theme-2.2.2.tar.gz.

File metadata

  • Download URL: django_agesci_campania_theme-2.2.2.tar.gz
  • Upload date:
  • Size: 1.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for django_agesci_campania_theme-2.2.2.tar.gz
Algorithm Hash digest
SHA256 a647c79f9779ba8fb851d1b16695861b214e56b4b42ba973777a96b4bb542f5e
MD5 13d5cff7b5571b45c997531d44389627
BLAKE2b-256 c25e7c1c62d0d18c6735da1a4bcb9e0dac6058a0ef6c0ad9b6b4574f4817d23b

See more details on using hashes here.

File details

Details for the file django_agesci_campania_theme-2.2.2-py3-none-any.whl.

File metadata

  • Download URL: django_agesci_campania_theme-2.2.2-py3-none-any.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for django_agesci_campania_theme-2.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 b3b63fe8e5f96bd0f0581c6ba9d643c5de10c122eca1613c170aa3af0ab421a3
MD5 e5b26a2d483ee77a81c82c588f01fbe6
BLAKE2b-256 a7852e0813187b90646fa8659f2372c9793c8fc0705175a9f7ee67ea5c44ebdd

See more details on using hashes here.

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