adminlte-django 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- adminlte_django-0.1.0/.gitignore +37 -0
- adminlte_django-0.1.0/CHANGELOG.md +169 -0
- adminlte_django-0.1.0/CLAUDE.md +74 -0
- adminlte_django-0.1.0/LICENSE +21 -0
- adminlte_django-0.1.0/MANIFEST.in +7 -0
- adminlte_django-0.1.0/PKG-INFO +576 -0
- adminlte_django-0.1.0/README.md +516 -0
- adminlte_django-0.1.0/ROADMAP.md +84 -0
- adminlte_django-0.1.0/demo/.env.example +13 -0
- adminlte_django-0.1.0/demo/accounts/__init__.py +0 -0
- adminlte_django-0.1.0/demo/accounts/apps.py +6 -0
- adminlte_django-0.1.0/demo/accounts/templates/accounts/login.html +74 -0
- adminlte_django-0.1.0/demo/accounts/tests.py +50 -0
- adminlte_django-0.1.0/demo/accounts/urls.py +28 -0
- adminlte_django-0.1.0/demo/accounts/views.py +19 -0
- adminlte_django-0.1.0/demo/assets/app.js +201 -0
- adminlte_django-0.1.0/demo/assets/app.scss +43 -0
- adminlte_django-0.1.0/demo/config/__init__.py +0 -0
- adminlte_django-0.1.0/demo/config/menu.py +218 -0
- adminlte_django-0.1.0/demo/config/settings.py +229 -0
- adminlte_django-0.1.0/demo/config/urls.py +18 -0
- adminlte_django-0.1.0/demo/config/wsgi.py +7 -0
- adminlte_django-0.1.0/demo/crud/__init__.py +0 -0
- adminlte_django-0.1.0/demo/crud/admin.py +57 -0
- adminlte_django-0.1.0/demo/crud/apps.py +6 -0
- adminlte_django-0.1.0/demo/crud/filters.py +43 -0
- adminlte_django-0.1.0/demo/crud/forms.py +36 -0
- adminlte_django-0.1.0/demo/crud/management/__init__.py +0 -0
- adminlte_django-0.1.0/demo/crud/management/commands/__init__.py +0 -0
- adminlte_django-0.1.0/demo/crud/management/commands/seed_demo.py +142 -0
- adminlte_django-0.1.0/demo/crud/migrations/0001_initial.py +28 -0
- adminlte_django-0.1.0/demo/crud/migrations/0002_company_tag_contact_company_project_task.py +78 -0
- adminlte_django-0.1.0/demo/crud/migrations/__init__.py +0 -0
- adminlte_django-0.1.0/demo/crud/models.py +114 -0
- adminlte_django-0.1.0/demo/crud/tables.py +52 -0
- adminlte_django-0.1.0/demo/crud/templates/crud/_actions_column.html +5 -0
- adminlte_django-0.1.0/demo/crud/templates/crud/contact_confirm_delete.html +25 -0
- adminlte_django-0.1.0/demo/crud/templates/crud/contact_form.html +21 -0
- adminlte_django-0.1.0/demo/crud/templates/crud/contact_list.html +23 -0
- adminlte_django-0.1.0/demo/crud/templates/crud/project_detail.html +74 -0
- adminlte_django-0.1.0/demo/crud/templates/crud/project_list.html +23 -0
- adminlte_django-0.1.0/demo/crud/tests.py +115 -0
- adminlte_django-0.1.0/demo/crud/urls.py +16 -0
- adminlte_django-0.1.0/demo/crud/views.py +84 -0
- adminlte_django-0.1.0/demo/dashboard/__init__.py +0 -0
- adminlte_django-0.1.0/demo/dashboard/apps.py +6 -0
- adminlte_django-0.1.0/demo/dashboard/registry.py +76 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/UI/general.html +1215 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/UI/icons.html +38 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/UI/timeline.html +124 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/_standalone.html +17 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/components.html +118 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/examples/lockscreen.html +50 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/examples/login-v2.html +82 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/examples/login.html +72 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/examples/register-v2.html +91 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/examples/register.html +77 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/forms/elements.html +337 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/forms/layout.html +199 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/forms/validation.html +210 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/forms/wizard.html +285 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/generate/theme.html +885 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/index.html +617 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/index2.html +1184 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/index3.html +439 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/layout/collapsed-sidebar-without-hover.html +51 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/layout/collapsed-sidebar.html +51 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/layout/fixed-complete.html +51 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/layout/fixed-footer.html +51 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/layout/fixed-header.html +51 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/layout/fixed-sidebar.html +51 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/layout/layout-custom-area.html +90 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/layout/layout-rtl.html +51 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/layout/logo-switch.html +51 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/layout/sidebar-mini.html +51 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/layout/unfixed-sidebar.html +51 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/mailbox/compose.html +83 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/mailbox/inbox.html +433 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/mailbox/read.html +134 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/native/form.html +46 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/native/messages-pagination.html +53 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/pages/404.html +42 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/pages/500.html +30 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/pages/calendar.html +195 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/pages/chat.html +358 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/pages/faq.html +315 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/pages/file-manager.html +770 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/pages/invoice.html +131 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/pages/kanban.html +368 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/pages/maintenance.html +33 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/pages/pricing.html +211 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/pages/profile.html +314 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/pages/projects.html +576 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/pages/settings.html +319 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/tables/data.html +247 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/tables/simple.html +347 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/widgets/cards.html +268 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/widgets/info-box.html +341 -0
- adminlte_django-0.1.0/demo/dashboard/templates/showcase/widgets/small-box.html +137 -0
- adminlte_django-0.1.0/demo/dashboard/tests.py +18 -0
- adminlte_django-0.1.0/demo/dashboard/urls.py +16 -0
- adminlte_django-0.1.0/demo/dashboard/views.py +148 -0
- adminlte_django-0.1.0/demo/manage.py +21 -0
- adminlte_django-0.1.0/demo/package-lock.json +1900 -0
- adminlte_django-0.1.0/demo/package.json +30 -0
- adminlte_django-0.1.0/demo/requirements.txt +14 -0
- adminlte_django-0.1.0/demo/static/adminlte/img/AdminLTEFullLogo.png +0 -0
- adminlte_django-0.1.0/demo/static/adminlte/img/avatar.png +0 -0
- adminlte_django-0.1.0/demo/static/adminlte/img/avatar2.png +0 -0
- adminlte_django-0.1.0/demo/static/adminlte/img/avatar3.png +0 -0
- adminlte_django-0.1.0/demo/static/adminlte/img/avatar4.png +0 -0
- adminlte_django-0.1.0/demo/static/adminlte/img/avatar5.png +0 -0
- adminlte_django-0.1.0/demo/static/adminlte/img/boxed-bg.jpg +0 -0
- adminlte_django-0.1.0/demo/static/adminlte/img/boxed-bg.png +0 -0
- adminlte_django-0.1.0/demo/static/adminlte/img/credit/american-express.png +0 -0
- adminlte_django-0.1.0/demo/static/adminlte/img/credit/cirrus.png +0 -0
- adminlte_django-0.1.0/demo/static/adminlte/img/credit/mastercard.png +0 -0
- adminlte_django-0.1.0/demo/static/adminlte/img/credit/paypal.png +0 -0
- adminlte_django-0.1.0/demo/static/adminlte/img/credit/paypal2.png +0 -0
- adminlte_django-0.1.0/demo/static/adminlte/img/credit/visa.png +0 -0
- adminlte_django-0.1.0/demo/static/adminlte/img/default-150x150.png +0 -0
- adminlte_django-0.1.0/demo/static/adminlte/img/icons.png +0 -0
- adminlte_django-0.1.0/demo/static/adminlte/img/photo1.png +0 -0
- adminlte_django-0.1.0/demo/static/adminlte/img/photo2.png +0 -0
- adminlte_django-0.1.0/demo/static/adminlte/img/photo3.jpg +0 -0
- adminlte_django-0.1.0/demo/static/adminlte/img/photo4.jpg +0 -0
- adminlte_django-0.1.0/demo/static/adminlte/img/prod-1.jpg +0 -0
- adminlte_django-0.1.0/demo/static/adminlte/img/prod-2.jpg +0 -0
- adminlte_django-0.1.0/demo/static/adminlte/img/prod-3.jpg +0 -0
- adminlte_django-0.1.0/demo/static/adminlte/img/prod-4.jpg +0 -0
- adminlte_django-0.1.0/demo/static/adminlte/img/prod-5.jpg +0 -0
- adminlte_django-0.1.0/demo/static/adminlte/img/user2-160x160.jpg +0 -0
- adminlte_django-0.1.0/demo/static/adminlte/img/user3-128x128.jpg +0 -0
- adminlte_django-0.1.0/demo/static/adminlte/img/user4-128x128.jpg +0 -0
- adminlte_django-0.1.0/demo/static/adminlte/img/user5-128x128.jpg +0 -0
- adminlte_django-0.1.0/demo/static/adminlte/img/user6-128x128.jpg +0 -0
- adminlte_django-0.1.0/demo/static/adminlte/img/user7-128x128.jpg +0 -0
- adminlte_django-0.1.0/demo/static/adminlte/img/user8-128x128.jpg +0 -0
- adminlte_django-0.1.0/demo/vite.config.js +18 -0
- adminlte_django-0.1.0/django_adminlte4/__init__.py +13 -0
- adminlte_django-0.1.0/django_adminlte4/admin_menu.py +64 -0
- adminlte_django-0.1.0/django_adminlte4/apps.py +26 -0
- adminlte_django-0.1.0/django_adminlte4/checks.py +135 -0
- adminlte_django-0.1.0/django_adminlte4/component_utils.py +105 -0
- adminlte_django-0.1.0/django_adminlte4/components/__init__.py +0 -0
- adminlte_django-0.1.0/django_adminlte4/components/form/__init__.py +0 -0
- adminlte_django-0.1.0/django_adminlte4/components/form/button.html +3 -0
- adminlte_django-0.1.0/django_adminlte4/components/form/button.py +35 -0
- adminlte_django-0.1.0/django_adminlte4/components/form/input-color.html +5 -0
- adminlte_django-0.1.0/django_adminlte4/components/form/input-file.html +5 -0
- adminlte_django-0.1.0/django_adminlte4/components/form/input-switch.html +8 -0
- adminlte_django-0.1.0/django_adminlte4/components/form/input.html +15 -0
- adminlte_django-0.1.0/django_adminlte4/components/form/input.py +38 -0
- adminlte_django-0.1.0/django_adminlte4/components/form/input_color.py +30 -0
- adminlte_django-0.1.0/django_adminlte4/components/form/input_file.py +33 -0
- adminlte_django-0.1.0/django_adminlte4/components/form/input_switch.py +35 -0
- adminlte_django-0.1.0/django_adminlte4/components/form/select.html +7 -0
- adminlte_django-0.1.0/django_adminlte4/components/form/select.py +34 -0
- adminlte_django-0.1.0/django_adminlte4/components/form/textarea.html +5 -0
- adminlte_django-0.1.0/django_adminlte4/components/form/textarea.py +29 -0
- adminlte_django-0.1.0/django_adminlte4/components/tool/__init__.py +0 -0
- adminlte_django-0.1.0/django_adminlte4/components/tool/chart.html +1 -0
- adminlte_django-0.1.0/django_adminlte4/components/tool/chart.py +49 -0
- adminlte_django-0.1.0/django_adminlte4/components/tool/datatable.html +1 -0
- adminlte_django-0.1.0/django_adminlte4/components/tool/datatable.py +42 -0
- adminlte_django-0.1.0/django_adminlte4/components/tool/editor.html +7 -0
- adminlte_django-0.1.0/django_adminlte4/components/tool/editor.py +36 -0
- adminlte_django-0.1.0/django_adminlte4/components/tool/modal.html +17 -0
- adminlte_django-0.1.0/django_adminlte4/components/tool/modal.py +38 -0
- adminlte_django-0.1.0/django_adminlte4/components/tool/sortable.html +3 -0
- adminlte_django-0.1.0/django_adminlte4/components/tool/sortable.py +35 -0
- adminlte_django-0.1.0/django_adminlte4/components/tool/vector-map.html +1 -0
- adminlte_django-0.1.0/django_adminlte4/components/tool/vector_map.py +42 -0
- adminlte_django-0.1.0/django_adminlte4/components/widget/__init__.py +0 -0
- adminlte_django-0.1.0/django_adminlte4/components/widget/accordion.html +17 -0
- adminlte_django-0.1.0/django_adminlte4/components/widget/accordion.py +38 -0
- adminlte_django-0.1.0/django_adminlte4/components/widget/alert.html +5 -0
- adminlte_django-0.1.0/django_adminlte4/components/widget/alert.py +28 -0
- adminlte_django-0.1.0/django_adminlte4/components/widget/breadcrumb.html +10 -0
- adminlte_django-0.1.0/django_adminlte4/components/widget/breadcrumb.py +19 -0
- adminlte_django-0.1.0/django_adminlte4/components/widget/callout.html +4 -0
- adminlte_django-0.1.0/django_adminlte4/components/widget/callout.py +18 -0
- adminlte_django-0.1.0/django_adminlte4/components/widget/card.html +40 -0
- adminlte_django-0.1.0/django_adminlte4/components/widget/card.py +48 -0
- adminlte_django-0.1.0/django_adminlte4/components/widget/description-block.html +12 -0
- adminlte_django-0.1.0/django_adminlte4/components/widget/description_block.py +28 -0
- adminlte_django-0.1.0/django_adminlte4/components/widget/direct-chat.html +37 -0
- adminlte_django-0.1.0/django_adminlte4/components/widget/direct_chat.py +30 -0
- adminlte_django-0.1.0/django_adminlte4/components/widget/info-box.html +16 -0
- adminlte_django-0.1.0/django_adminlte4/components/widget/info_box.py +32 -0
- adminlte_django-0.1.0/django_adminlte4/components/widget/nav-messages.html +28 -0
- adminlte_django-0.1.0/django_adminlte4/components/widget/nav-notifications.html +18 -0
- adminlte_django-0.1.0/django_adminlte4/components/widget/nav_messages.py +24 -0
- adminlte_django-0.1.0/django_adminlte4/components/widget/nav_notifications.py +25 -0
- adminlte_django-0.1.0/django_adminlte4/components/widget/profile-card.html +21 -0
- adminlte_django-0.1.0/django_adminlte4/components/widget/profile_card.py +30 -0
- adminlte_django-0.1.0/django_adminlte4/components/widget/progress-group.html +9 -0
- adminlte_django-0.1.0/django_adminlte4/components/widget/progress.html +5 -0
- adminlte_django-0.1.0/django_adminlte4/components/widget/progress.py +35 -0
- adminlte_django-0.1.0/django_adminlte4/components/widget/progress_group.py +26 -0
- adminlte_django-0.1.0/django_adminlte4/components/widget/ratings.html +3 -0
- adminlte_django-0.1.0/django_adminlte4/components/widget/ratings.py +32 -0
- adminlte_django-0.1.0/django_adminlte4/components/widget/small-box.html +13 -0
- adminlte_django-0.1.0/django_adminlte4/components/widget/small_box.py +25 -0
- adminlte_django-0.1.0/django_adminlte4/components/widget/tabs.html +20 -0
- adminlte_django-0.1.0/django_adminlte4/components/widget/tabs.py +40 -0
- adminlte_django-0.1.0/django_adminlte4/components/widget/timeline.html +20 -0
- adminlte_django-0.1.0/django_adminlte4/components/widget/timeline.py +25 -0
- adminlte_django-0.1.0/django_adminlte4/components/widget/toast.html +10 -0
- adminlte_django-0.1.0/django_adminlte4/components/widget/toast.py +30 -0
- adminlte_django-0.1.0/django_adminlte4/conf.py +163 -0
- adminlte_django-0.1.0/django_adminlte4/context_processors.py +71 -0
- adminlte_django-0.1.0/django_adminlte4/forms.py +51 -0
- adminlte_django-0.1.0/django_adminlte4/frontend/adminlte-plugins.js.stub +81 -0
- adminlte_django-0.1.0/django_adminlte4/frontend/app.js.stub +29 -0
- adminlte_django-0.1.0/django_adminlte4/frontend/app.scss.stub +12 -0
- adminlte_django-0.1.0/django_adminlte4/frontend/package.json.stub +21 -0
- adminlte_django-0.1.0/django_adminlte4/frontend/vite.config.stub.js +20 -0
- adminlte_django-0.1.0/django_adminlte4/locale/es/LC_MESSAGES/django.mo +0 -0
- adminlte_django-0.1.0/django_adminlte4/locale/es/LC_MESSAGES/django.po +330 -0
- adminlte_django-0.1.0/django_adminlte4/management/__init__.py +0 -0
- adminlte_django-0.1.0/django_adminlte4/management/commands/__init__.py +0 -0
- adminlte_django-0.1.0/django_adminlte4/management/commands/adminlte_install.py +82 -0
- adminlte_django-0.1.0/django_adminlte4/management/commands/adminlte_make_auth.py +95 -0
- adminlte_django-0.1.0/django_adminlte4/management/commands/adminlte_scaffold.py +153 -0
- adminlte_django-0.1.0/django_adminlte4/management/commands/adminlte_status.py +69 -0
- adminlte_django-0.1.0/django_adminlte4/menu/__init__.py +3 -0
- adminlte_django-0.1.0/django_adminlte4/menu/builder.py +84 -0
- adminlte_django-0.1.0/django_adminlte4/menu/filters.py +221 -0
- adminlte_django-0.1.0/django_adminlte4/menu/helpers.py +49 -0
- adminlte_django-0.1.0/django_adminlte4/py.typed +0 -0
- adminlte_django-0.1.0/django_adminlte4/static/adminlte/dist/css/adminlte-admin.css +41 -0
- adminlte_django-0.1.0/django_adminlte4/static/adminlte/dist/css/adminlte.min.css +6 -0
- adminlte_django-0.1.0/django_adminlte4/static/adminlte/dist/css/adminlte.overrides.css +33 -0
- adminlte_django-0.1.0/django_adminlte4/static/adminlte/dist/css/adminlte.rtl.min.css +6 -0
- adminlte_django-0.1.0/django_adminlte4/static/adminlte/dist/css/bootstrap-icons.min.css +5 -0
- adminlte_django-0.1.0/django_adminlte4/static/adminlte/dist/css/fonts/bootstrap-icons.woff +0 -0
- adminlte_django-0.1.0/django_adminlte4/static/adminlte/dist/css/fonts/bootstrap-icons.woff2 +0 -0
- adminlte_django-0.1.0/django_adminlte4/static/adminlte/dist/css/overlayscrollbars.min.css +9 -0
- adminlte_django-0.1.0/django_adminlte4/static/adminlte/dist/js/adminlte.init.js +74 -0
- adminlte_django-0.1.0/django_adminlte4/static/adminlte/dist/js/adminlte.min.js +6 -0
- adminlte_django-0.1.0/django_adminlte4/static/adminlte/dist/js/bootstrap.bundle.min.js +6 -0
- adminlte_django-0.1.0/django_adminlte4/static/adminlte/dist/js/overlayscrollbars.browser.es6.min.js +10 -0
- adminlte_django-0.1.0/django_adminlte4/static/adminlte/img/AdminLTELogo.png +0 -0
- adminlte_django-0.1.0/django_adminlte4/static/adminlte/img/user1-128x128.jpg +0 -0
- adminlte_django-0.1.0/django_adminlte4/templates/admin/base.html +170 -0
- adminlte_django-0.1.0/django_adminlte4/templates/admin/base_site.html +6 -0
- adminlte_django-0.1.0/django_adminlte4/templates/admin/login.html +64 -0
- adminlte_django-0.1.0/django_adminlte4/templates/adminlte/auth/_form.html +17 -0
- adminlte_django-0.1.0/django_adminlte4/templates/adminlte/auth/auth-master.html +31 -0
- adminlte_django-0.1.0/django_adminlte4/templates/adminlte/auth/lockscreen.html +23 -0
- adminlte_django-0.1.0/django_adminlte4/templates/adminlte/auth/login.html +55 -0
- adminlte_django-0.1.0/django_adminlte4/templates/adminlte/auth/register.html +40 -0
- adminlte_django-0.1.0/django_adminlte4/templates/adminlte/forms/_help_and_errors.html +6 -0
- adminlte_django-0.1.0/django_adminlte4/templates/adminlte/forms/div.html +20 -0
- adminlte_django-0.1.0/django_adminlte4/templates/adminlte/forms/field.html +23 -0
- adminlte_django-0.1.0/django_adminlte4/templates/adminlte/master.html +51 -0
- adminlte_django-0.1.0/django_adminlte4/templates/adminlte/page.html +21 -0
- adminlte_django-0.1.0/django_adminlte4/templates/adminlte/partials/_assets_prebuilt.html +16 -0
- adminlte_django-0.1.0/django_adminlte4/templates/adminlte/partials/_assets_vite.html +9 -0
- adminlte_django-0.1.0/django_adminlte4/templates/adminlte/partials/_breadcrumb_items.html +8 -0
- adminlte_django-0.1.0/django_adminlte4/templates/adminlte/partials/color-mode.html +30 -0
- adminlte_django-0.1.0/django_adminlte4/templates/adminlte/partials/footer.html +7 -0
- adminlte_django-0.1.0/django_adminlte4/templates/adminlte/partials/language-menu.html +30 -0
- adminlte_django-0.1.0/django_adminlte4/templates/adminlte/partials/menu-item.html +41 -0
- adminlte_django-0.1.0/django_adminlte4/templates/adminlte/partials/messages.html +15 -0
- adminlte_django-0.1.0/django_adminlte4/templates/adminlte/partials/navbar-messages.html +28 -0
- adminlte_django-0.1.0/django_adminlte4/templates/adminlte/partials/navbar-notifications.html +19 -0
- adminlte_django-0.1.0/django_adminlte4/templates/adminlte/partials/navbar.html +61 -0
- adminlte_django-0.1.0/django_adminlte4/templates/adminlte/partials/pagination.html +31 -0
- adminlte_django-0.1.0/django_adminlte4/templates/adminlte/partials/preloader.html +6 -0
- adminlte_django-0.1.0/django_adminlte4/templates/adminlte/partials/sidebar.html +41 -0
- adminlte_django-0.1.0/django_adminlte4/templates/adminlte/partials/usermenu.html +56 -0
- adminlte_django-0.1.0/django_adminlte4/templates/allauth/elements/alert.html +4 -0
- adminlte_django-0.1.0/django_adminlte4/templates/allauth/elements/button.html +11 -0
- adminlte_django-0.1.0/django_adminlte4/templates/allauth/elements/field.html +20 -0
- adminlte_django-0.1.0/django_adminlte4/templates/allauth/elements/fields.html +23 -0
- adminlte_django-0.1.0/django_adminlte4/templates/allauth/elements/form.html +9 -0
- adminlte_django-0.1.0/django_adminlte4/templates/allauth/elements/h1.html +1 -0
- adminlte_django-0.1.0/django_adminlte4/templates/allauth/elements/h2.html +1 -0
- adminlte_django-0.1.0/django_adminlte4/templates/allauth/elements/hr.html +1 -0
- adminlte_django-0.1.0/django_adminlte4/templates/allauth/elements/p.html +1 -0
- adminlte_django-0.1.0/django_adminlte4/templates/allauth/elements/panel.html +8 -0
- adminlte_django-0.1.0/django_adminlte4/templates/allauth/layouts/base.html +17 -0
- adminlte_django-0.1.0/django_adminlte4/templates/allauth/layouts/entrance.html +16 -0
- adminlte_django-0.1.0/django_adminlte4/templates/allauth/layouts/manage.html +16 -0
- adminlte_django-0.1.0/django_adminlte4/templates/django_tables2/adminlte.html +17 -0
- adminlte_django-0.1.0/django_adminlte4/templates/registration/logged_out.html +6 -0
- adminlte_django-0.1.0/django_adminlte4/templates/registration/login.html +2 -0
- adminlte_django-0.1.0/django_adminlte4/templates/registration/password_change_done.html +6 -0
- adminlte_django-0.1.0/django_adminlte4/templates/registration/password_change_form.html +9 -0
- adminlte_django-0.1.0/django_adminlte4/templates/registration/password_reset_complete.html +6 -0
- adminlte_django-0.1.0/django_adminlte4/templates/registration/password_reset_confirm.html +14 -0
- adminlte_django-0.1.0/django_adminlte4/templates/registration/password_reset_done.html +6 -0
- adminlte_django-0.1.0/django_adminlte4/templates/registration/password_reset_email.html +10 -0
- adminlte_django-0.1.0/django_adminlte4/templates/registration/password_reset_form.html +10 -0
- adminlte_django-0.1.0/django_adminlte4/templates/registration/password_reset_subject.txt +1 -0
- adminlte_django-0.1.0/django_adminlte4/templatetags/__init__.py +0 -0
- adminlte_django-0.1.0/django_adminlte4/templatetags/adminlte.py +171 -0
- adminlte_django-0.1.0/docs/admin.md +46 -0
- adminlte_django-0.1.0/docs/assets.md +58 -0
- adminlte_django-0.1.0/docs/auth.md +48 -0
- adminlte_django-0.1.0/docs/changelog.md +3 -0
- adminlte_django-0.1.0/docs/commands.md +32 -0
- adminlte_django-0.1.0/docs/components.md +88 -0
- adminlte_django-0.1.0/docs/configuration.md +149 -0
- adminlte_django-0.1.0/docs/demo.md +54 -0
- adminlte_django-0.1.0/docs/deployment.md +44 -0
- adminlte_django-0.1.0/docs/extras.md +45 -0
- adminlte_django-0.1.0/docs/forms.md +84 -0
- adminlte_django-0.1.0/docs/i18n.md +45 -0
- adminlte_django-0.1.0/docs/index.md +71 -0
- adminlte_django-0.1.0/docs/installation.md +123 -0
- adminlte_django-0.1.0/docs/layout.md +70 -0
- adminlte_django-0.1.0/docs/menu.md +96 -0
- adminlte_django-0.1.0/docs/screenshots/dashboard-dark.png +0 -0
- adminlte_django-0.1.0/docs/screenshots/dashboard-light.png +0 -0
- adminlte_django-0.1.0/docs/screenshots/dashboardpack/admindek.png +0 -0
- adminlte_django-0.1.0/docs/screenshots/dashboardpack/apex.png +0 -0
- adminlte_django-0.1.0/docs/screenshots/dashboardpack/haze.png +0 -0
- adminlte_django-0.1.0/docs/screenshots/dashboardpack/svelteforge.png +0 -0
- adminlte_django-0.1.0/docs/screenshots/dashboardpack/tailpanel.png +0 -0
- adminlte_django-0.1.0/docs/screenshots/dashboardpack/zenith.png +0 -0
- adminlte_django-0.1.0/docs/tables.md +68 -0
- adminlte_django-0.1.0/mkdocs.yml +82 -0
- adminlte_django-0.1.0/pyproject.toml +68 -0
- adminlte_django-0.1.0/tests/__init__.py +0 -0
- adminlte_django-0.1.0/tests/settings.py +84 -0
- adminlte_django-0.1.0/tests/test_admin_theme.py +87 -0
- adminlte_django-0.1.0/tests/test_breadcrumb.py +31 -0
- adminlte_django-0.1.0/tests/test_checks.py +56 -0
- adminlte_django-0.1.0/tests/test_commands.py +46 -0
- adminlte_django-0.1.0/tests/test_components.py +63 -0
- adminlte_django-0.1.0/tests/test_components_v2.py +80 -0
- adminlte_django-0.1.0/tests/test_conf.py +29 -0
- adminlte_django-0.1.0/tests/test_context_processor.py +24 -0
- adminlte_django-0.1.0/tests/test_forms_renderer.py +62 -0
- adminlte_django-0.1.0/tests/test_i18n.py +24 -0
- adminlte_django-0.1.0/tests/test_menu.py +143 -0
- adminlte_django-0.1.0/tests/test_native.py +57 -0
- adminlte_django-0.1.0/tests/test_navbar.py +78 -0
- adminlte_django-0.1.0/tests/urls.py +10 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Python (anchored to repo root: the package intentionally ships
|
|
2
|
+
# django_adminlte4/static/adminlte/dist/, which must NOT be ignored)
|
|
3
|
+
__pycache__/
|
|
4
|
+
*.py[cod]
|
|
5
|
+
*.egg-info/
|
|
6
|
+
.eggs/
|
|
7
|
+
/build/
|
|
8
|
+
/dist/
|
|
9
|
+
.venv/
|
|
10
|
+
venv/
|
|
11
|
+
|
|
12
|
+
# Django
|
|
13
|
+
*.sqlite3
|
|
14
|
+
staticfiles/
|
|
15
|
+
db.sqlite3
|
|
16
|
+
|
|
17
|
+
# Secrets / local env (.env.example is committed)
|
|
18
|
+
.env
|
|
19
|
+
|
|
20
|
+
# Node / Vite
|
|
21
|
+
node_modules/
|
|
22
|
+
**/assets/dist/
|
|
23
|
+
.vite/
|
|
24
|
+
|
|
25
|
+
# OS / editors
|
|
26
|
+
.DS_Store
|
|
27
|
+
*.map
|
|
28
|
+
.idea/
|
|
29
|
+
.vscode/
|
|
30
|
+
|
|
31
|
+
# Test / coverage
|
|
32
|
+
.pytest_cache/
|
|
33
|
+
.coverage
|
|
34
|
+
htmlcov/
|
|
35
|
+
|
|
36
|
+
# MkDocs build output
|
|
37
|
+
site/
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to `django-adminlte4` are documented here. The format is
|
|
4
|
+
based on [Keep a Changelog](https://keepachangelog.com/).
|
|
5
|
+
|
|
6
|
+
## [Unreleased]
|
|
7
|
+
|
|
8
|
+
### Added — performance & Django-native rendering
|
|
9
|
+
|
|
10
|
+
- `AdminLTEFormRenderer` — set
|
|
11
|
+
`FORM_RENDERER = "django_adminlte4.forms.AdminLTEFormRenderer"` and plain
|
|
12
|
+
`{{ form }}` renders AdminLTE/Bootstrap 5 markup project-wide: per-widget-type
|
|
13
|
+
classes (`form-control` / `form-select` / `form-check-input` / `form-range`),
|
|
14
|
+
`is-invalid` + `invalid-feedback` validation states, `form-text` help text and
|
|
15
|
+
non-field errors as an alert. Widget templates fall back to Django's built-in
|
|
16
|
+
form engine, so `django.forms` is **not** required in `INSTALLED_APPS`.
|
|
17
|
+
- Django **system checks** replacing the startup warning: `adminlte.W001`
|
|
18
|
+
(unknown config key), `adminlte.E002` (django-components loader missing — the
|
|
19
|
+
`APP_DIRS=True` footgun, now with an actionable hint), `adminlte.W003`
|
|
20
|
+
(malformed or misspelled menu items), `adminlte.W004` (context processor not
|
|
21
|
+
configured).
|
|
22
|
+
- `ADMINLTE["language_switcher"]` — topbar dropdown posting to Django's
|
|
23
|
+
`set_language` view.
|
|
24
|
+
- `py.typed` marker — the package's type annotations are now visible to
|
|
25
|
+
mypy/pyright.
|
|
26
|
+
- `GateFilter` recurses into submenus: unauthorized children are pruned, and a
|
|
27
|
+
parent left with no children (and no link of its own) is dropped.
|
|
28
|
+
- `ActiveFilter` derives auto-active patterns from the resolved `href`, so
|
|
29
|
+
`route:`-based items get active detection too.
|
|
30
|
+
|
|
31
|
+
### Changed — performance
|
|
32
|
+
|
|
33
|
+
- The merged `ADMINLTE` config is computed once per process (invalidated via
|
|
34
|
+
`setting_changed`); the default footer copyright year is evaluated lazily at
|
|
35
|
+
render time instead of import time.
|
|
36
|
+
- Menus are built lazily (`SimpleLazyObject`) — pages that never render a
|
|
37
|
+
sidebar/navbar skip the build entirely — and the filter pipeline is split:
|
|
38
|
+
request-independent filters (`HrefFilter`, `SearchFilter`) run once per
|
|
39
|
+
process (per active language), so `reverse()` no longer re-runs per request.
|
|
40
|
+
Custom filters keep per-request semantics via `per_request = True` (default).
|
|
41
|
+
- Wildcard active-state patterns are compiled once (`lru_cache`) instead of per
|
|
42
|
+
item per request.
|
|
43
|
+
- The demo front-end is code-split: ApexCharts, jsVectorMap, Tabulator, Quill,
|
|
44
|
+
SortableJS and FullCalendar load on demand via `adminlteUse()` dynamic
|
|
45
|
+
imports; the always-loaded core drops to ~46 kB gzipped. The chart-refit
|
|
46
|
+
`setTimeout` hack was replaced by a width-guarded `ResizeObserver`.
|
|
47
|
+
- Demo-only sample images (~2.9 MB) moved out of the pip package into
|
|
48
|
+
`demo/static/`.
|
|
49
|
+
|
|
50
|
+
### Changed — demo
|
|
51
|
+
|
|
52
|
+
- Dashboard v1 is data-driven: ORM-fed small boxes linking to the CRUD views
|
|
53
|
+
and themed admin, plus an activity chart fetching six months of aggregates
|
|
54
|
+
from `/api/dashboard/activity.json`.
|
|
55
|
+
- The sidebar menu uses named routes (`route:`) for all internal items, and a
|
|
56
|
+
**STAFF ONLY** section showcases `GateFilter` (callable + permission-string
|
|
57
|
+
gating) — log in with the pre-filled credentials to see it appear.
|
|
58
|
+
- New `/native/form` page demonstrating the form renderer; the language
|
|
59
|
+
switcher is enabled with an English/Español `LANGUAGES` list.
|
|
60
|
+
- `seed_demo` spreads project start dates across ~5 months so the dashboard
|
|
61
|
+
chart has a curve.
|
|
62
|
+
|
|
63
|
+
### Added — v1 (core)
|
|
64
|
+
|
|
65
|
+
- AdminLTE 4 base layout (`adminlte/master.html`, `adminlte/page.html`) with
|
|
66
|
+
navbar, sidebar, footer, color-mode toggle and user menu partials.
|
|
67
|
+
- Config-driven sidebar/topnav menu via `settings.ADMINLTE["menu"]` with a
|
|
68
|
+
per-request filter pipeline (`GateFilter`, `HrefFilter`, `ActiveFilter`,
|
|
69
|
+
`SearchFilter`) — a faithful port of the Laravel package's menu system.
|
|
70
|
+
- Settings surface (`settings.ADMINLTE`) mirroring `config/adminlte.php`, merged
|
|
71
|
+
over defaults by `django_adminlte4.conf`.
|
|
72
|
+
- Context processor exposing config + per-request menus; `adminlte_body_classes`
|
|
73
|
+
and `adminlte_title` template tags; an `add_class` form-field filter.
|
|
74
|
+
- Form components: `adminlte_input`, `adminlte_textarea`, `adminlte_select`,
|
|
75
|
+
`adminlte_input_switch`, `adminlte_input_color`, `adminlte_input_file`,
|
|
76
|
+
`adminlte_button` — with bound-field validation feedback + value repopulation.
|
|
77
|
+
- Widget components: `adminlte_card`, `adminlte_small_box`, `adminlte_info_box`,
|
|
78
|
+
`adminlte_alert`, `adminlte_callout`, `adminlte_progress`,
|
|
79
|
+
`adminlte_progress_group`, `adminlte_timeline`, `adminlte_description_block`,
|
|
80
|
+
`adminlte_profile_card`, `adminlte_ratings`, `adminlte_breadcrumb`.
|
|
81
|
+
- Auth templates (login/register/lockscreen) wired to Django's auth views.
|
|
82
|
+
- Rich, data-driven topbar: Messages and Notifications dropdowns plus a full
|
|
83
|
+
user card, configured via `ADMINLTE["navbar_messages"]`,
|
|
84
|
+
`["navbar_notifications"]` and `["usermenu"]` (each optional). Falls back to a
|
|
85
|
+
Django-user-driven menu when `usermenu` is omitted. Added `logo_alt_text` and
|
|
86
|
+
`navbar_search` config keys.
|
|
87
|
+
- Vite front-end pipeline (django-vite) with `npm`-installed `admin-lte`.
|
|
88
|
+
- Management commands: `adminlte_install`, `adminlte_status`,
|
|
89
|
+
`adminlte_make_auth`, `adminlte_scaffold`.
|
|
90
|
+
- Demo project showcasing the layout, menu, components and auth flow.
|
|
91
|
+
|
|
92
|
+
### Added — v2 (interactive + plugin-backed components)
|
|
93
|
+
|
|
94
|
+
- Bootstrap components: `adminlte_modal`, `adminlte_toast`, `adminlte_tabs`,
|
|
95
|
+
`adminlte_accordion`, `adminlte_direct_chat`, `adminlte_nav_messages`,
|
|
96
|
+
`adminlte_nav_notifications`.
|
|
97
|
+
- Plugin-backed Tool components emitting `data-*` + JSON-config containers:
|
|
98
|
+
`adminlte_chart` (ApexCharts), `adminlte_vector_map` (jsVectorMap),
|
|
99
|
+
`adminlte_datatable` (Tabulator), `adminlte_editor` (Quill),
|
|
100
|
+
`adminlte_sortable` (SortableJS).
|
|
101
|
+
- Plugin initializer (`frontend/adminlte-plugins.js.stub`, installed to
|
|
102
|
+
`assets/adminlte-plugins.js`) that lazily imports each library only when a
|
|
103
|
+
matching element is present. Wired into `app.js.stub` and the demo bundle.
|
|
104
|
+
- Demo "Components (v2)" showcase page exercising all of the above.
|
|
105
|
+
|
|
106
|
+
### Added — Django-native integration
|
|
107
|
+
|
|
108
|
+
- **Themed Django admin**: `django.contrib.admin` skinned with the AdminLTE
|
|
109
|
+
shell; the sidebar is auto-built from the registered apps/models through the
|
|
110
|
+
same menu builder + filter pipeline (honours per-user view permissions +
|
|
111
|
+
active state). Configurable via `ADMINLTE["admin_brand"]` / `["admin_menu"]`.
|
|
112
|
+
- **Node-optional assets**: a pre-built bundle ships in `static/adminlte/dist/`;
|
|
113
|
+
`ADMINLTE["assets_mode"]="static"` serves it with no Vite/npm (django-vite is
|
|
114
|
+
only imported in `"vite"` mode).
|
|
115
|
+
- **Messages → alerts**: `partials/messages.html` renders the messages framework
|
|
116
|
+
as dismissible AdminLTE alerts (level → class + icon, error → danger).
|
|
117
|
+
- **Pagination**: reusable `partials/pagination.html` from a `Paginator`
|
|
118
|
+
`page_obj`, preserving the current query string.
|
|
119
|
+
- **Built-in auth**: AdminLTE-themed `registration/` templates (login, logout,
|
|
120
|
+
password change + the full password-reset flow) on the auth shell.
|
|
121
|
+
- **django-tables2 / django-filter** (`[tables]` extra): a
|
|
122
|
+
`django_tables2/adminlte.html` theme (card wrapper + footer pagination) plus a
|
|
123
|
+
demo `crud` app proving list/filter/create/update/delete end to end.
|
|
124
|
+
- **crispy-forms** (`[crispy]` extra): one-line `{% crispy form %}` whole-form
|
|
125
|
+
rendering via the crispy-bootstrap5 pack.
|
|
126
|
+
- **django-allauth** (`[allauth]` extra): AdminLTE-themed allauth layouts
|
|
127
|
+
(`base` / `entrance` / `manage`) and elements (fields, field, form, button,
|
|
128
|
+
alert, h1/h2, p, hr, panel).
|
|
129
|
+
- **Auto-breadcrumbs**: `{% adminlte_breadcrumb %}` derives crumbs from
|
|
130
|
+
`request.path`; the default content of `page.html`'s breadcrumb block.
|
|
131
|
+
- **i18n**: a package message catalog with a fully-translated Spanish (`es`)
|
|
132
|
+
locale (compiled `.mo`), shipped via `MANIFEST.in`.
|
|
133
|
+
- **Self-hosted demo**: every front-end plugin (ApexCharts, jsVectorMap,
|
|
134
|
+
Tabulator, SortableJS, FullCalendar) loads from the Vite bundle — no CDN.
|
|
135
|
+
|
|
136
|
+
### Added — production starter (demo)
|
|
137
|
+
|
|
138
|
+
- Twelve-factor settings via `django-environ`: `SECRET_KEY`, `DEBUG`,
|
|
139
|
+
`ALLOWED_HOSTS`, `DATABASE_URL`, `EMAIL_URL`, `CSRF_TRUSTED_ORIGINS` from the
|
|
140
|
+
environment, with a git-ignored `.env` (see `.env.example`).
|
|
141
|
+
- SQLite by default, **PostgreSQL-ready** via `DATABASE_URL`; console email by
|
|
142
|
+
default, SMTP via `EMAIL_URL`.
|
|
143
|
+
- **WhiteNoise** compressed + manifest static storage in production (plain
|
|
144
|
+
storage in dev); production security hardening (HSTS, SSL redirect, secure
|
|
145
|
+
cookies, nosniff) auto-enabled when `DEBUG=False`.
|
|
146
|
+
- `demo/requirements.txt` (package + extras + `django-environ`/`whitenoise`/
|
|
147
|
+
`gunicorn`) and a deployment section in the README.
|
|
148
|
+
- Stripped `sourceMappingURL` comments from the shipped `static/adminlte/dist`
|
|
149
|
+
bundle so `collectstatic` with manifest storage succeeds without `.map` files.
|
|
150
|
+
|
|
151
|
+
### Added — relational demo data
|
|
152
|
+
|
|
153
|
+
- A small relational schema in the demo `crud` app: `Company`, `Contact` (now
|
|
154
|
+
linked to a Company), `Tag`, `Project` (FK company + lead, M2M team + tags)
|
|
155
|
+
and `Task` (FK project + assignee) — exercising FK, reverse-FK and M2M.
|
|
156
|
+
- Themed admin registrations with an inline (Tasks on Project), autocomplete
|
|
157
|
+
fields and list filters, so the relational model is fully manageable in the
|
|
158
|
+
AdminLTE-skinned admin.
|
|
159
|
+
- `seed_demo` management command — deterministic, idempotent sample data (6
|
|
160
|
+
companies, 24 contacts, 6 tags, 10 projects, 40 tasks) plus an optional demo
|
|
161
|
+
superuser (`admin` / `adminpass`).
|
|
162
|
+
- Front-end **Projects** list (django-tables2 + filter) and a detail page
|
|
163
|
+
rendering the related company, lead, team, tags and tasks.
|
|
164
|
+
|
|
165
|
+
### Still deferred
|
|
166
|
+
|
|
167
|
+
- Additional locales beyond English + Spanish (the extraction structure ships;
|
|
168
|
+
run `makemessages` to add more).
|
|
169
|
+
- The form Wizard as a dedicated component (the 1:1 demo page covers it).
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
4
|
+
|
|
5
|
+
## What this is
|
|
6
|
+
|
|
7
|
+
`django-adminlte4` — the official AdminLTE 4 (Bootstrap 5.3, vanilla JS) integration for Django 6+/Python 3.12+, by Colorlib. It is a deliberate port of ColorlibHQ's **Laravel AdminLTE package**: `conf.py` mirrors `config/adminlte.php`, and the menu filter pipeline mirrors the Laravel `filters` array. When designing new features, parity with the Laravel package is the reference point.
|
|
8
|
+
|
|
9
|
+
Three top-level pieces:
|
|
10
|
+
|
|
11
|
+
- `django_adminlte4/` — the installable package (published as `django-adminlte4`)
|
|
12
|
+
- `demo/` — a full Django project showcasing the package; deployed live at django.adminlte.io
|
|
13
|
+
- `docs/` — MkDocs Material documentation site, served at django.adminlte.io/docs
|
|
14
|
+
|
|
15
|
+
## Commands
|
|
16
|
+
|
|
17
|
+
A virtualenv exists at `.venv/` (repo root). Pytest config lives in `pyproject.toml` (`DJANGO_SETTINGS_MODULE = "tests.settings"`).
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
# Tests (run from repo root)
|
|
21
|
+
.venv/bin/python -m pytest # all (~160 tests)
|
|
22
|
+
.venv/bin/python -m pytest tests/test_menu.py # one file
|
|
23
|
+
.venv/bin/python -m pytest tests/test_menu.py -k active # by keyword
|
|
24
|
+
|
|
25
|
+
# Demo (from demo/)
|
|
26
|
+
python manage.py runserver
|
|
27
|
+
python manage.py seed_demo # seed CRUD demo data
|
|
28
|
+
npm run build # Vite build → demo/assets/dist (required before runserver if dist is missing)
|
|
29
|
+
npm run dev # Vite dev server on :5173 (django-vite HMR)
|
|
30
|
+
|
|
31
|
+
# Docs (from repo root)
|
|
32
|
+
pip install -e .[docs]
|
|
33
|
+
mkdocs serve # http://127.0.0.1:8000
|
|
34
|
+
|
|
35
|
+
# Install for development
|
|
36
|
+
pip install -e .[test] # package + pytest
|
|
37
|
+
cd demo && pip install -r requirements.txt # demo: installs -e ..[tables,crispy,allauth] + env/whitenoise/gunicorn
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Architecture
|
|
41
|
+
|
|
42
|
+
### Configuration → context processor → templates
|
|
43
|
+
|
|
44
|
+
Downstream projects configure everything through a single `ADMINLTE = {...}` dict in Django settings. `django_adminlte4/conf.py` shallow-merges it over `DEFAULTS` (`menu` and `plugins` replaced wholesale). `context_processors.adminlte` runs **once per request**: it builds the menu via `MenuBuilder` and exposes `adminlte` (merged config), `adminlte_menu_sidebar`, `adminlte_menu_navbar_left/right` to every template.
|
|
45
|
+
|
|
46
|
+
### Menu filter pipeline (the core Django feature)
|
|
47
|
+
|
|
48
|
+
`django_adminlte4/menu/builder.py` deep-copies each raw menu item and threads it through an ordered filter chain (`menu/filters.py`): **Gate → Href → Active → Search**. Any filter returning `None` drops the item. Filters receive the request, which is why the builder is per-request, not a singleton. `admin_menu.py` converts `django.contrib.admin`'s app/model registry into menu-item dicts and feeds them through the *same* pipeline, so the themed admin sidebar gets href resolution and active-state for free. Projects can add custom filters via `ADMINLTE["filters"]`.
|
|
49
|
+
|
|
50
|
+
### Components
|
|
51
|
+
|
|
52
|
+
~33 [django-components](https://github.com/django-components/django-components) in three families under `django_adminlte4/components/`: `form/` (input, select, button…), `widget/` (card, small-box, timeline…), `tool/` (chart, datatable, modal… — mostly v2 scope). Each component is a `.py` + `.html` pair. The shared pattern lives in `component_utils.py` (intentionally *outside* `components/` so autodiscovery doesn't import it as a component): `extract_props()` splits kwargs into declared props vs. pass-through HTML attributes (the equivalent of Blade's `$attributes->merge()`), with `data_*`/`aria_*` normalized to hyphenated names. Follow this pattern for any new component.
|
|
53
|
+
|
|
54
|
+
### Templates
|
|
55
|
+
|
|
56
|
+
`django_adminlte4/templates/` overrides, in order of interest: `adminlte/` (the `master.html`/`page.html` base layout + partials), `admin/` (themed django.contrib.admin), `registration/` (Django auth views), `allauth/` (layouts + elements for django-allauth), `django_tables2/adminlte.html` (set as `DJANGO_TABLES2_TEMPLATE`). Optional integrations are extras in `pyproject.toml`: `[tables]`, `[crispy]`, `[allauth]`.
|
|
57
|
+
|
|
58
|
+
### Frontend assets
|
|
59
|
+
|
|
60
|
+
The package ships a prebuilt bundle in `django_adminlte4/static/adminlte/dist/` — this is **committed on purpose** (see the anchored `.gitignore` rules; only `/assets/dist/` in project roots is ignored). For Vite-based projects, `management/commands/adminlte_install.py` copies the `frontend/*.stub` files (app.js, app.scss, vite.config) into the user's project; the demo's `demo/assets/` + `demo/vite.config.js` is the worked example (build output → `demo/assets/dist`, picked up via `STATICFILES_DIRS` + django-vite manifest). Other commands: `adminlte_status`, `adminlte_scaffold` (CRUD app), `adminlte_make_auth` (auth app).
|
|
61
|
+
|
|
62
|
+
### Critical settings gotcha
|
|
63
|
+
|
|
64
|
+
`TEMPLATES[0]["APP_DIRS"]` **must be `False`** with an explicit `loaders` list including `django_components.template_loader.Loader` (django-components requirement). `tests/settings.py` and `demo/config/settings.py` are the canonical examples — keep them, the README snippet, and `docs/installation.md` in sync when settings requirements change.
|
|
65
|
+
|
|
66
|
+
### Demo project layout
|
|
67
|
+
|
|
68
|
+
`demo/config/menu.py` defines the sidebar 1:1 with the upstream AdminLTE HTML demo. Apps: `dashboard/` (showcase pages + `registry.py`), `crud/` (Contacts/Projects — django-tables2 + django-filter + crispy forms, the "Django-native" exhibits), `accounts/` (auth pages). The demo starts logged out with pre-filled login credentials.
|
|
69
|
+
|
|
70
|
+
## Conventions
|
|
71
|
+
|
|
72
|
+
- v1 scope is layout, menu, auth, Form + Widget components; Tool/plugin components (datatable, charts, calendar, …) are v2 — see `ROADMAP.md` before adding features.
|
|
73
|
+
- Docstrings frequently cite the Laravel counterpart being ported; keep doing this for new ports.
|
|
74
|
+
- Update `CHANGELOG.md` and the relevant `docs/*.md` page alongside feature changes; `docs/changelog.md` mirrors the root changelog.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2014-2026 ColorlibHQ
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
include LICENSE README.md CHANGELOG.md
|
|
2
|
+
recursive-include django_adminlte4/templates *
|
|
3
|
+
recursive-include django_adminlte4/components *.html
|
|
4
|
+
recursive-include django_adminlte4/static *
|
|
5
|
+
recursive-include django_adminlte4/frontend *
|
|
6
|
+
recursive-include django_adminlte4/locale *
|
|
7
|
+
global-exclude __pycache__ *.py[cod]
|