adminlte-django 0.1.0__py3-none-any.whl

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.
Files changed (164) hide show
  1. adminlte_django-0.1.0.dist-info/METADATA +576 -0
  2. adminlte_django-0.1.0.dist-info/RECORD +164 -0
  3. adminlte_django-0.1.0.dist-info/WHEEL +4 -0
  4. adminlte_django-0.1.0.dist-info/licenses/LICENSE +21 -0
  5. django_adminlte4/__init__.py +13 -0
  6. django_adminlte4/admin_menu.py +64 -0
  7. django_adminlte4/apps.py +26 -0
  8. django_adminlte4/checks.py +135 -0
  9. django_adminlte4/component_utils.py +105 -0
  10. django_adminlte4/components/__init__.py +0 -0
  11. django_adminlte4/components/form/__init__.py +0 -0
  12. django_adminlte4/components/form/button.html +3 -0
  13. django_adminlte4/components/form/button.py +35 -0
  14. django_adminlte4/components/form/input-color.html +5 -0
  15. django_adminlte4/components/form/input-file.html +5 -0
  16. django_adminlte4/components/form/input-switch.html +8 -0
  17. django_adminlte4/components/form/input.html +15 -0
  18. django_adminlte4/components/form/input.py +38 -0
  19. django_adminlte4/components/form/input_color.py +30 -0
  20. django_adminlte4/components/form/input_file.py +33 -0
  21. django_adminlte4/components/form/input_switch.py +35 -0
  22. django_adminlte4/components/form/select.html +7 -0
  23. django_adminlte4/components/form/select.py +34 -0
  24. django_adminlte4/components/form/textarea.html +5 -0
  25. django_adminlte4/components/form/textarea.py +29 -0
  26. django_adminlte4/components/tool/__init__.py +0 -0
  27. django_adminlte4/components/tool/chart.html +1 -0
  28. django_adminlte4/components/tool/chart.py +49 -0
  29. django_adminlte4/components/tool/datatable.html +1 -0
  30. django_adminlte4/components/tool/datatable.py +42 -0
  31. django_adminlte4/components/tool/editor.html +7 -0
  32. django_adminlte4/components/tool/editor.py +36 -0
  33. django_adminlte4/components/tool/modal.html +17 -0
  34. django_adminlte4/components/tool/modal.py +38 -0
  35. django_adminlte4/components/tool/sortable.html +3 -0
  36. django_adminlte4/components/tool/sortable.py +35 -0
  37. django_adminlte4/components/tool/vector-map.html +1 -0
  38. django_adminlte4/components/tool/vector_map.py +42 -0
  39. django_adminlte4/components/widget/__init__.py +0 -0
  40. django_adminlte4/components/widget/accordion.html +17 -0
  41. django_adminlte4/components/widget/accordion.py +38 -0
  42. django_adminlte4/components/widget/alert.html +5 -0
  43. django_adminlte4/components/widget/alert.py +28 -0
  44. django_adminlte4/components/widget/breadcrumb.html +10 -0
  45. django_adminlte4/components/widget/breadcrumb.py +19 -0
  46. django_adminlte4/components/widget/callout.html +4 -0
  47. django_adminlte4/components/widget/callout.py +18 -0
  48. django_adminlte4/components/widget/card.html +40 -0
  49. django_adminlte4/components/widget/card.py +48 -0
  50. django_adminlte4/components/widget/description-block.html +12 -0
  51. django_adminlte4/components/widget/description_block.py +28 -0
  52. django_adminlte4/components/widget/direct-chat.html +37 -0
  53. django_adminlte4/components/widget/direct_chat.py +30 -0
  54. django_adminlte4/components/widget/info-box.html +16 -0
  55. django_adminlte4/components/widget/info_box.py +32 -0
  56. django_adminlte4/components/widget/nav-messages.html +28 -0
  57. django_adminlte4/components/widget/nav-notifications.html +18 -0
  58. django_adminlte4/components/widget/nav_messages.py +24 -0
  59. django_adminlte4/components/widget/nav_notifications.py +25 -0
  60. django_adminlte4/components/widget/profile-card.html +21 -0
  61. django_adminlte4/components/widget/profile_card.py +30 -0
  62. django_adminlte4/components/widget/progress-group.html +9 -0
  63. django_adminlte4/components/widget/progress.html +5 -0
  64. django_adminlte4/components/widget/progress.py +35 -0
  65. django_adminlte4/components/widget/progress_group.py +26 -0
  66. django_adminlte4/components/widget/ratings.html +3 -0
  67. django_adminlte4/components/widget/ratings.py +32 -0
  68. django_adminlte4/components/widget/small-box.html +13 -0
  69. django_adminlte4/components/widget/small_box.py +25 -0
  70. django_adminlte4/components/widget/tabs.html +20 -0
  71. django_adminlte4/components/widget/tabs.py +40 -0
  72. django_adminlte4/components/widget/timeline.html +20 -0
  73. django_adminlte4/components/widget/timeline.py +25 -0
  74. django_adminlte4/components/widget/toast.html +10 -0
  75. django_adminlte4/components/widget/toast.py +30 -0
  76. django_adminlte4/conf.py +163 -0
  77. django_adminlte4/context_processors.py +71 -0
  78. django_adminlte4/forms.py +51 -0
  79. django_adminlte4/frontend/adminlte-plugins.js.stub +81 -0
  80. django_adminlte4/frontend/app.js.stub +29 -0
  81. django_adminlte4/frontend/app.scss.stub +12 -0
  82. django_adminlte4/frontend/package.json.stub +21 -0
  83. django_adminlte4/frontend/vite.config.stub.js +20 -0
  84. django_adminlte4/locale/es/LC_MESSAGES/django.mo +0 -0
  85. django_adminlte4/locale/es/LC_MESSAGES/django.po +330 -0
  86. django_adminlte4/management/__init__.py +0 -0
  87. django_adminlte4/management/commands/__init__.py +0 -0
  88. django_adminlte4/management/commands/adminlte_install.py +82 -0
  89. django_adminlte4/management/commands/adminlte_make_auth.py +95 -0
  90. django_adminlte4/management/commands/adminlte_scaffold.py +153 -0
  91. django_adminlte4/management/commands/adminlte_status.py +69 -0
  92. django_adminlte4/menu/__init__.py +3 -0
  93. django_adminlte4/menu/builder.py +84 -0
  94. django_adminlte4/menu/filters.py +221 -0
  95. django_adminlte4/menu/helpers.py +49 -0
  96. django_adminlte4/py.typed +0 -0
  97. django_adminlte4/static/adminlte/dist/css/adminlte-admin.css +41 -0
  98. django_adminlte4/static/adminlte/dist/css/adminlte.min.css +6 -0
  99. django_adminlte4/static/adminlte/dist/css/adminlte.overrides.css +33 -0
  100. django_adminlte4/static/adminlte/dist/css/adminlte.rtl.min.css +6 -0
  101. django_adminlte4/static/adminlte/dist/css/bootstrap-icons.min.css +5 -0
  102. django_adminlte4/static/adminlte/dist/css/fonts/bootstrap-icons.woff +0 -0
  103. django_adminlte4/static/adminlte/dist/css/fonts/bootstrap-icons.woff2 +0 -0
  104. django_adminlte4/static/adminlte/dist/css/overlayscrollbars.min.css +9 -0
  105. django_adminlte4/static/adminlte/dist/js/adminlte.init.js +74 -0
  106. django_adminlte4/static/adminlte/dist/js/adminlte.min.js +6 -0
  107. django_adminlte4/static/adminlte/dist/js/bootstrap.bundle.min.js +6 -0
  108. django_adminlte4/static/adminlte/dist/js/overlayscrollbars.browser.es6.min.js +10 -0
  109. django_adminlte4/static/adminlte/img/AdminLTELogo.png +0 -0
  110. django_adminlte4/static/adminlte/img/user1-128x128.jpg +0 -0
  111. django_adminlte4/templates/admin/base.html +170 -0
  112. django_adminlte4/templates/admin/base_site.html +6 -0
  113. django_adminlte4/templates/admin/login.html +64 -0
  114. django_adminlte4/templates/adminlte/auth/_form.html +17 -0
  115. django_adminlte4/templates/adminlte/auth/auth-master.html +31 -0
  116. django_adminlte4/templates/adminlte/auth/lockscreen.html +23 -0
  117. django_adminlte4/templates/adminlte/auth/login.html +55 -0
  118. django_adminlte4/templates/adminlte/auth/register.html +40 -0
  119. django_adminlte4/templates/adminlte/forms/_help_and_errors.html +6 -0
  120. django_adminlte4/templates/adminlte/forms/div.html +20 -0
  121. django_adminlte4/templates/adminlte/forms/field.html +23 -0
  122. django_adminlte4/templates/adminlte/master.html +51 -0
  123. django_adminlte4/templates/adminlte/page.html +21 -0
  124. django_adminlte4/templates/adminlte/partials/_assets_prebuilt.html +16 -0
  125. django_adminlte4/templates/adminlte/partials/_assets_vite.html +9 -0
  126. django_adminlte4/templates/adminlte/partials/_breadcrumb_items.html +8 -0
  127. django_adminlte4/templates/adminlte/partials/color-mode.html +30 -0
  128. django_adminlte4/templates/adminlte/partials/footer.html +7 -0
  129. django_adminlte4/templates/adminlte/partials/language-menu.html +30 -0
  130. django_adminlte4/templates/adminlte/partials/menu-item.html +41 -0
  131. django_adminlte4/templates/adminlte/partials/messages.html +15 -0
  132. django_adminlte4/templates/adminlte/partials/navbar-messages.html +28 -0
  133. django_adminlte4/templates/adminlte/partials/navbar-notifications.html +19 -0
  134. django_adminlte4/templates/adminlte/partials/navbar.html +61 -0
  135. django_adminlte4/templates/adminlte/partials/pagination.html +31 -0
  136. django_adminlte4/templates/adminlte/partials/preloader.html +6 -0
  137. django_adminlte4/templates/adminlte/partials/sidebar.html +41 -0
  138. django_adminlte4/templates/adminlte/partials/usermenu.html +56 -0
  139. django_adminlte4/templates/allauth/elements/alert.html +4 -0
  140. django_adminlte4/templates/allauth/elements/button.html +11 -0
  141. django_adminlte4/templates/allauth/elements/field.html +20 -0
  142. django_adminlte4/templates/allauth/elements/fields.html +23 -0
  143. django_adminlte4/templates/allauth/elements/form.html +9 -0
  144. django_adminlte4/templates/allauth/elements/h1.html +1 -0
  145. django_adminlte4/templates/allauth/elements/h2.html +1 -0
  146. django_adminlte4/templates/allauth/elements/hr.html +1 -0
  147. django_adminlte4/templates/allauth/elements/p.html +1 -0
  148. django_adminlte4/templates/allauth/elements/panel.html +8 -0
  149. django_adminlte4/templates/allauth/layouts/base.html +17 -0
  150. django_adminlte4/templates/allauth/layouts/entrance.html +16 -0
  151. django_adminlte4/templates/allauth/layouts/manage.html +16 -0
  152. django_adminlte4/templates/django_tables2/adminlte.html +17 -0
  153. django_adminlte4/templates/registration/logged_out.html +6 -0
  154. django_adminlte4/templates/registration/login.html +2 -0
  155. django_adminlte4/templates/registration/password_change_done.html +6 -0
  156. django_adminlte4/templates/registration/password_change_form.html +9 -0
  157. django_adminlte4/templates/registration/password_reset_complete.html +6 -0
  158. django_adminlte4/templates/registration/password_reset_confirm.html +14 -0
  159. django_adminlte4/templates/registration/password_reset_done.html +6 -0
  160. django_adminlte4/templates/registration/password_reset_email.html +10 -0
  161. django_adminlte4/templates/registration/password_reset_form.html +10 -0
  162. django_adminlte4/templates/registration/password_reset_subject.txt +1 -0
  163. django_adminlte4/templatetags/__init__.py +0 -0
  164. django_adminlte4/templatetags/adminlte.py +171 -0
@@ -0,0 +1,576 @@
1
+ Metadata-Version: 2.4
2
+ Name: adminlte-django
3
+ Version: 0.1.0
4
+ Summary: Official AdminLTE 4 integration for Django — Bootstrap 5.3, vanilla JS, Vite-ready.
5
+ Project-URL: Homepage, https://adminlte.io
6
+ Project-URL: Repository, https://github.com/ColorlibHQ/adminlte-django
7
+ Author: ColorlibHQ
8
+ License: MIT License
9
+
10
+ Copyright (c) 2014-2026 ColorlibHQ
11
+
12
+ Permission is hereby granted, free of charge, to any person obtaining a copy
13
+ of this software and associated documentation files (the "Software"), to deal
14
+ in the Software without restriction, including without limitation the rights
15
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
16
+ copies of the Software, and to permit persons to whom the Software is
17
+ furnished to do so, subject to the following conditions:
18
+
19
+ The above copyright notice and this permission notice shall be included in all
20
+ copies or substantial portions of the Software.
21
+
22
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
28
+ SOFTWARE.
29
+ License-File: LICENSE
30
+ Keywords: admin,adminlte,bootstrap,dashboard,django,template
31
+ Classifier: Environment :: Web Environment
32
+ Classifier: Framework :: Django
33
+ Classifier: Framework :: Django :: 6.0
34
+ Classifier: Intended Audience :: Developers
35
+ Classifier: License :: OSI Approved :: MIT License
36
+ Classifier: Operating System :: OS Independent
37
+ Classifier: Programming Language :: Python :: 3 :: Only
38
+ Classifier: Programming Language :: Python :: 3.12
39
+ Classifier: Programming Language :: Python :: 3.13
40
+ Classifier: Programming Language :: Python :: 3.14
41
+ Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
42
+ Requires-Python: >=3.12
43
+ Requires-Dist: django-components<0.151,>=0.150
44
+ Requires-Dist: django-vite<4.0,>=3.1
45
+ Requires-Dist: django>=6.0
46
+ Provides-Extra: allauth
47
+ Requires-Dist: django-allauth>=65.18; extra == 'allauth'
48
+ Provides-Extra: crispy
49
+ Requires-Dist: crispy-bootstrap5>=2026.3; extra == 'crispy'
50
+ Requires-Dist: django-crispy-forms>=2.6; extra == 'crispy'
51
+ Provides-Extra: docs
52
+ Requires-Dist: mkdocs-material>=9.7; extra == 'docs'
53
+ Provides-Extra: tables
54
+ Requires-Dist: django-filter>=25.2; extra == 'tables'
55
+ Requires-Dist: django-tables2>=3.0; extra == 'tables'
56
+ Provides-Extra: test
57
+ Requires-Dist: pytest-django>=4.12; extra == 'test'
58
+ Requires-Dist: pytest>=9.0; extra == 'test'
59
+ Description-Content-Type: text/markdown
60
+
61
+ # Django AdminLTE 4
62
+
63
+ [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](#license)
64
+ [![Django 6.0+](https://img.shields.io/badge/Django-6.0+-092E20.svg?logo=django&logoColor=white)](https://www.djangoproject.com/)
65
+ [![Python 3.12+](https://img.shields.io/badge/Python-3.12+-3776ab.svg?logo=python&logoColor=white)](https://www.python.org/)
66
+ [![Bootstrap 5.3](https://img.shields.io/badge/Bootstrap-5.3-7952b3.svg?logo=bootstrap&logoColor=white)](https://getbootstrap.com/docs/5.3/)
67
+ [![Docs](https://img.shields.io/badge/docs-django.adminlte.io-blue.svg)](https://django.adminlte.io/docs/)
68
+
69
+ Official **AdminLTE 4** integration for **Django** — Bootstrap 5.3, vanilla JS,
70
+ Vite-ready. A config-driven sidebar menu with a per-request filter pipeline, an
71
+ AdminLTE 4 base layout, a library of [django-components](https://github.com/django-components/django-components),
72
+ a themed `django.contrib.admin`, and first-class hooks into Django's own forms,
73
+ tables, auth, messages, pagination and i18n. By [Colorlib](https://colorlib.com).
74
+
75
+ **Live demo:** [django.adminlte.io](https://django.adminlte.io/) · **Docs:** [django.adminlte.io/docs](https://django.adminlte.io/docs/)
76
+
77
+ <p align="center">
78
+ <a href="https://django.adminlte.io/">
79
+ <img alt="Django AdminLTE 4 dashboard — light theme" src="docs/screenshots/dashboard-light.png" width="49%">
80
+ </a>
81
+ <a href="https://django.adminlte.io/">
82
+ <img alt="Django AdminLTE 4 dashboard — dark theme" src="docs/screenshots/dashboard-dark.png" width="49%">
83
+ </a>
84
+ </p>
85
+
86
+ **Available for your stack** — the same AdminLTE 4 dashboard, in the framework you know best:
87
+
88
+ <p align="center">
89
+ <a href="https://github.com/ColorlibHQ/adminlte-react"><img height="36" alt="React" src="https://img.shields.io/badge/React-20232A?style=for-the-badge&logo=react&logoColor=61DAFB"></a>
90
+ <a href="https://github.com/ColorlibHQ/adminlte-react"><img height="36" alt="Next.js" src="https://img.shields.io/badge/Next.js-000000?style=for-the-badge&logo=nextdotjs&logoColor=white"></a>
91
+ <a href="https://github.com/ColorlibHQ/adminlte-vue"><img height="36" alt="Vue" src="https://img.shields.io/badge/Vue.js-35495E?style=for-the-badge&logo=vuedotjs&logoColor=4FC08D"></a>
92
+ <a href="https://github.com/ColorlibHQ/adminlte-vue"><img height="36" alt="Nuxt" src="https://img.shields.io/badge/Nuxt-00DC82?style=for-the-badge&logo=nuxt&logoColor=white"></a>
93
+ <a href="https://github.com/ColorlibHQ/adminlte-laravel"><img height="36" alt="Laravel" src="https://img.shields.io/badge/Laravel-FF2D20?style=for-the-badge&logo=laravel&logoColor=white"></a>
94
+ <a href="https://github.com/ColorlibHQ/adminlte-django"><img height="36" alt="Django" src="https://img.shields.io/badge/Django-092E20?style=for-the-badge&logo=django&logoColor=white"></a>
95
+ </p>
96
+
97
+ <p align="center"><sub>
98
+ Frameworks:
99
+ <a href="https://github.com/ColorlibHQ/adminlte-react">React</a> ·
100
+ <a href="https://github.com/ColorlibHQ/adminlte-react">Next.js</a> ·
101
+ <a href="https://github.com/ColorlibHQ/adminlte-vue">Vue</a> ·
102
+ <a href="https://github.com/ColorlibHQ/adminlte-vue">Nuxt</a> ·
103
+ <a href="https://github.com/ColorlibHQ/adminlte-laravel">Laravel</a> ·
104
+ <a href="https://github.com/ColorlibHQ/adminlte-django">Django</a>
105
+ </sub></p>
106
+
107
+ > **v1 scope:** layout, menu + filter pipeline, auth pages, and the Form +
108
+ > Widget component families. Tool/plugin components (datatable, charts,
109
+ > calendar, editor, kanban, vector-map) land in v2.
110
+
111
+ ## Documentation
112
+
113
+ Full documentation lives in [`docs/`](docs/) as a **MkDocs Material** site —
114
+ Getting started, a complete [configuration reference](docs/configuration.md),
115
+ [components](docs/components.md), [admin](docs/admin.md), [forms](docs/forms.md),
116
+ [tables](docs/tables.md), [auth](docs/auth.md), [i18n](docs/i18n.md),
117
+ [assets](docs/assets.md), [deployment](docs/deployment.md) and more. Build/serve
118
+ it locally:
119
+
120
+ ```bash
121
+ pip install -e .[docs]
122
+ mkdocs serve # http://127.0.0.1:8000 (or: mkdocs build)
123
+ ```
124
+
125
+ ## Requirements
126
+
127
+ - Python 3.12+
128
+ - Django 6.0+
129
+ - `django-components` 0.150, `django-vite` 3.1+
130
+ - Node 18+ (Vite build for the front-end assets)
131
+
132
+ ## Installation
133
+
134
+ ```bash
135
+ pip install adminlte-django
136
+ ```
137
+
138
+ ### 1. Settings
139
+
140
+ ```python
141
+ INSTALLED_APPS = [
142
+ "django_components",
143
+ # ... django.contrib.* ...
144
+ "django_vite",
145
+ "django_adminlte4",
146
+ ]
147
+
148
+ MIDDLEWARE = [
149
+ # ...
150
+ "django_components.middleware.ComponentDependencyMiddleware",
151
+ ]
152
+
153
+ COMPONENTS = {"dirs": [], "app_dirs": ["components"], "autodiscover": True}
154
+
155
+ TEMPLATES = [{
156
+ "BACKEND": "django.template.backends.django.DjangoTemplates",
157
+ "DIRS": [],
158
+ # IMPORTANT: APP_DIRS must be False because we provide an explicit `loaders`
159
+ # list (required by django-components).
160
+ "APP_DIRS": False,
161
+ "OPTIONS": {
162
+ "context_processors": [
163
+ "django.template.context_processors.request",
164
+ "django.contrib.auth.context_processors.auth",
165
+ "django_adminlte4.context_processors.adminlte",
166
+ ],
167
+ "loaders": [(
168
+ "django.template.loaders.cached.Loader",
169
+ [
170
+ "django.template.loaders.filesystem.Loader",
171
+ "django.template.loaders.app_directories.Loader",
172
+ "django_components.template_loader.Loader",
173
+ ],
174
+ )],
175
+ "builtins": ["django_components.templatetags.component_tags"],
176
+ },
177
+ }]
178
+
179
+ STATICFILES_FINDERS = [
180
+ "django.contrib.staticfiles.finders.FileSystemFinder",
181
+ "django.contrib.staticfiles.finders.AppDirectoriesFinder",
182
+ "django_components.finders.ComponentsFileSystemFinder",
183
+ ]
184
+
185
+ DJANGO_VITE = {"default": {"dev_mode": DEBUG, "manifest_path": BASE_DIR / "assets" / "dist" / "manifest.json"}}
186
+ ```
187
+
188
+ ### 2. Front-end assets
189
+
190
+ ```bash
191
+ python manage.py adminlte_install # copies assets/app.js, assets/app.scss, vite.config.js stubs
192
+ npm install # installs admin-lte, bootstrap, overlayscrollbars, ...
193
+ npm run dev # dev server with HMR (DEBUG=True)
194
+ # production: npm run build && python manage.py collectstatic
195
+ ```
196
+
197
+ ### 3. Configure (`settings.ADMINLTE`)
198
+
199
+ ```python
200
+ ADMINLTE = {
201
+ "title": "My Dashboard",
202
+ "logo": "<b>My</b>App",
203
+ "sidebar_theme": "dark", # dark | light
204
+ "menu": [
205
+ {"text": "Dashboard", "url": "/", "icon": "bi bi-speedometer"},
206
+ {"header": "CONTENT"},
207
+ {"text": "Posts", "icon": "bi bi-file-post", "submenu": [
208
+ {"text": "All posts", "route": "posts:index", "icon": "bi bi-circle"},
209
+ {"text": "New post", "route": "posts:create", "icon": "bi bi-circle", "can": "blog.add_post"},
210
+ ]},
211
+ ],
212
+ }
213
+ ```
214
+
215
+ Menu item keys: `header`, `text`, `route` (named route), `url` (raw), `icon`,
216
+ `icon_color`, `label` + `label_color` (badge), `active` (URL patterns),
217
+ `target`, `can` (permission/callable — item hidden if denied), `submenu`,
218
+ `topnav`/`topnav_right`.
219
+
220
+ ### Topbar dropdowns
221
+
222
+ The navbar renders Messages/Notifications dropdowns and a rich user card when
223
+ you provide their data (all optional — omit a key to hide that dropdown):
224
+
225
+ ```python
226
+ ADMINLTE = {
227
+ "logo": "<b>My</b>App", # auth-page lockup (HTML allowed)
228
+ "logo_alt_text": "My App", # sidebar brand text next to the logo
229
+ "navbar_search": True, # search trigger icon
230
+ "navbar_messages": {
231
+ "count": 3,
232
+ "items": [
233
+ {"image": "adminlte/img/user1-128x128.jpg", "name": "Brad Diesel",
234
+ "text": "Call me whenever you can...", "time": "4 Hours Ago",
235
+ "star": "danger", "url": "#"},
236
+ ],
237
+ },
238
+ "navbar_notifications": {
239
+ "count": 15,
240
+ "items": [
241
+ {"icon": "bi bi-envelope", "text": "4 new messages", "time": "3 mins", "url": "#"},
242
+ ],
243
+ },
244
+ "usermenu": { # rich user card; omit to fall back to the
245
+ "image": "adminlte/img/user2-160x160.jpg", # Django-user simple menu
246
+ "name": "Alexander Pierce", "description": "Web Developer",
247
+ "since": "Member since Nov. 2023",
248
+ "stats": [{"label": "Followers", "url": "#"}, {"label": "Sales", "url": "#"}],
249
+ },
250
+ }
251
+ ```
252
+
253
+ When `usermenu` is omitted, the topbar shows a minimal menu driven by the
254
+ authenticated Django user (with a CSRF-protected POST sign-out to your `logout`
255
+ route). `color_mode_toggle` and a fullscreen toggle are always shown.
256
+
257
+ ## Pages
258
+
259
+ ```django
260
+ {% extends "adminlte/page.html" %}
261
+ {% block page_title %}Dashboard{% endblock %}
262
+ {% block breadcrumb %}
263
+ <li class="breadcrumb-item active">Dashboard</li>
264
+ {% endblock %}
265
+ {% block content %}
266
+ {% component "adminlte_card" title="Sales" theme="primary" outline=True collapsible=True %}
267
+ Card body…
268
+ {% fill "footer" %}Updated 5 min ago{% endfill %}
269
+ {% endcomponent %}
270
+ {% endblock %}
271
+ ```
272
+
273
+ ## Components (v1)
274
+
275
+ **Widget:** `adminlte_card`, `adminlte_small_box`, `adminlte_info_box`,
276
+ `adminlte_alert`, `adminlte_callout`, `adminlte_progress`,
277
+ `adminlte_progress_group`, `adminlte_timeline`, `adminlte_description_block`,
278
+ `adminlte_profile_card`, `adminlte_ratings`, `adminlte_breadcrumb`.
279
+
280
+ **Form:** `adminlte_input`, `adminlte_textarea`, `adminlte_select`,
281
+ `adminlte_input_switch`, `adminlte_input_color`, `adminlte_input_file`,
282
+ `adminlte_button`. Bind a Django form field for automatic validation feedback:
283
+
284
+ ```django
285
+ {% component "adminlte_input" field=form.email type="email" %}{% endcomponent %}
286
+ ```
287
+
288
+ ## Components (v2 — interactive + plugin-backed)
289
+
290
+ **Bootstrap (no extra libs):** `adminlte_modal`, `adminlte_toast`,
291
+ `adminlte_tabs`, `adminlte_accordion`, `adminlte_direct_chat`,
292
+ `adminlte_nav_messages`, `adminlte_nav_notifications`.
293
+
294
+ **Plugin-backed Tool components:** `adminlte_chart` (ApexCharts),
295
+ `adminlte_vector_map` (jsVectorMap), `adminlte_datatable` (Tabulator),
296
+ `adminlte_editor` (Quill), `adminlte_sortable` (SortableJS). Each renders a
297
+ `data-*` container with a JSON config; the shipped initializer
298
+ (`assets/adminlte-plugins.js`, installed by `adminlte_install`) lazily imports
299
+ each library only when a matching element is on the page — so you install just
300
+ the plugins you use:
301
+
302
+ ```bash
303
+ npm i apexcharts jsvectormap tabulator-tables quill sortablejs # pick what you need
304
+ ```
305
+
306
+ ```django
307
+ {% component "adminlte_chart" type="area" series=series categories=labels height="300px" %}{% endcomponent %}
308
+ {% component "adminlte_datatable" columns=columns data=rows %}{% endcomponent %}
309
+ {% component "adminlte_tabs" items=tabs %}{% endcomponent %}
310
+ ```
311
+
312
+ ## Django admin theme
313
+
314
+ `django.contrib.admin` is themed with the AdminLTE 4 shell out of the box — the
315
+ topbar, and a sidebar **auto-generated from your registered apps/models** (it
316
+ reuses the same menu builder + filter pipeline as the app sidebar, so it honours
317
+ per-user view permissions and active-state). The native admin change-list /
318
+ change-form content renders inside the shell.
319
+
320
+ Enable it by putting `django_adminlte4` **before** `django.contrib.admin` in
321
+ `INSTALLED_APPS` (so its `admin/*` template overrides win):
322
+
323
+ ```python
324
+ INSTALLED_APPS = [
325
+ "django_components",
326
+ "django_adminlte4", # must precede django.contrib.admin
327
+ "django.contrib.admin",
328
+ # ...
329
+ ]
330
+ ```
331
+
332
+ Customise via the `ADMINLTE` dict: `admin_brand` (sidebar brand text) and
333
+ `admin_menu` (a list of menu-item dicts to replace the auto app/model menu).
334
+
335
+ ## Pre-built assets (no Node required)
336
+
337
+ The package ships a compiled asset bundle (`static/adminlte/dist/`), so you can
338
+ run with **zero Node/npm** — just `collectstatic`. The themed admin always uses
339
+ it; switch the front-end layout to it with:
340
+
341
+ ```python
342
+ ADMINLTE = {"assets_mode": "static"} # default "vite"
343
+ ```
344
+
345
+ `"vite"` keeps the HMR/dev pipeline (and the optional plugin set) via
346
+ `django-vite`; `"static"` serves the shipped bundle (Bootstrap + AdminLTE +
347
+ Bootstrap Icons + OverlayScrollbars + color-mode/init). With `"static"`,
348
+ `django-vite` is not imported at all.
349
+
350
+ ## Messages, pagination & auth
351
+
352
+ **Messages** — Django's messages framework is rendered as dismissible AdminLTE
353
+ alerts automatically (included in the base layout). Levels map to Bootstrap
354
+ classes with an icon, and `error` → `danger`, so no `MESSAGE_TAGS` config is
355
+ required. Override the `{% block messages %}` to customise.
356
+
357
+ **Pagination** — a reusable partial for any Django `Paginator` page that
358
+ preserves the current query string (filters/sort):
359
+
360
+ ```django
361
+ {% include "adminlte/partials/pagination.html" with page_obj=page_obj %}
362
+ ```
363
+
364
+ **Auth** — themed `registration/` templates ship for Django's built-in auth
365
+ views, so the full login / logout / **password change + reset** flow works on
366
+ the AdminLTE auth card out of the box — just wire the URLs:
367
+
368
+ ```python
369
+ path("", include("django.contrib.auth.urls")),
370
+ ```
371
+
372
+ ## Forms (crispy-forms)
373
+
374
+ For one-line whole-form rendering of any Django form/`ModelForm`, install the
375
+ `[crispy]` extra and use the Bootstrap 5 pack (AdminLTE 4 *is* Bootstrap 5, so
376
+ it renders natively — no custom pack needed):
377
+
378
+ ```python
379
+ INSTALLED_APPS += ["crispy_forms", "crispy_bootstrap5"]
380
+ CRISPY_ALLOWED_TEMPLATE_PACKS = "bootstrap5"
381
+ CRISPY_TEMPLATE_PACK = "bootstrap5"
382
+ ```
383
+
384
+ ```django
385
+ {% load crispy_forms_tags %}
386
+ {% crispy form %} {# renders the <form>, fields, csrf and buttons #}
387
+ ```
388
+
389
+ Drive the layout/buttons from a `FormHelper` on the form (see the demo's
390
+ `crud/forms.py`). Prefer the bespoke `adminlte_input`/`adminlte_select`
391
+ components when you want to hand-author a designed form instead.
392
+
393
+ ## Tables & filters (CRUD)
394
+
395
+ For server-rendered data tables, install the `[tables]` extra
396
+ (`django-tables2` + `django-filter`) and point tables2 at the AdminLTE theme:
397
+
398
+ ```python
399
+ # settings.py
400
+ DJANGO_TABLES2_TEMPLATE = "django_tables2/adminlte.html"
401
+ ```
402
+
403
+ The theme wraps any `tables.Table` in an AdminLTE card with the pagination in
404
+ the card footer — sortable headers, query-string-preserving paging, all native.
405
+ A `SingleTableMixin + FilterView` list view then gets a themed table plus a
406
+ filter form for free. The demo's **Contacts (CRUD)** page shows the full stack
407
+ (list + filter + create/update/delete + success messages) end to end.
408
+
409
+ ## django-allauth
410
+
411
+ Install the `[allauth]` extra to get AdminLTE-themed [django-allauth](https://allauth.org)
412
+ pages. The package overrides allauth's **layouts** (`base` / `entrance` /
413
+ `manage`) and **elements** (fields, field, form, button, alert, headings, panel)
414
+ — so every allauth page (login, signup, password reset, account management)
415
+ renders on the AdminLTE auth card with Bootstrap 5 fields, no per-page work:
416
+
417
+ ```python
418
+ INSTALLED_APPS = [
419
+ "django_adminlte4", # before allauth so its template overrides win
420
+ # ...
421
+ "allauth", "allauth.account",
422
+ ]
423
+ # urls.py: path("accounts/", include("allauth.urls"))
424
+ ```
425
+
426
+ ## Internationalization
427
+
428
+ Templates use `{% translate %}` / `{% blocktranslate %}` throughout, and the
429
+ package ships a message catalog with a fully-translated **Spanish (`es`)**
430
+ locale (compiled and included in the wheel). Set `USE_I18N = True` and a
431
+ `LANGUAGE_CODE`, or add `LocaleMiddleware`, to translate the UI; run
432
+ `makemessages` to add more locales.
433
+
434
+ ## Breadcrumbs
435
+
436
+ Pages set `{% block breadcrumb %}` explicitly, or fall back to
437
+ `{% adminlte_breadcrumb %}` — which derives a *Home → …* trail from
438
+ `request.path` automatically (it's the default content of that block).
439
+
440
+ ## Management commands
441
+
442
+ | Command | Purpose |
443
+ |---|---|
444
+ | `adminlte_install` | Copy the Vite front-end stubs and static images into your project |
445
+ | `adminlte_status` | Print version, merged config, component count, Vite manifest status |
446
+ | `adminlte_make_auth` | Scaffold login/register/lockscreen auth views, urls and templates |
447
+ | `adminlte_scaffold <app>` | Scaffold a CRUD app using Card + Form components |
448
+
449
+ ## Demo
450
+
451
+ ```bash
452
+ cd demo
453
+ pip install -r requirements.txt # package + extras + prod deps (env, whitenoise, gunicorn)
454
+ cp .env.example .env # local dev config (DEBUG=True)
455
+ npm install && npm run dev # terminal 1 — Vite dev server / HMR
456
+ python manage.py migrate
457
+ python manage.py seed_demo # sample relational data + demo superuser (admin/adminpass)
458
+ python manage.py runserver # terminal 2
459
+ ```
460
+
461
+ The demo ships a small relational schema (`Company → Contact`, `Project ↔ Tag`,
462
+ `Project ↔ Contact` team, `Project → Task`) showcased through the themed admin,
463
+ a **Contacts** CRUD page and a **Projects** list + detail. Re-run `seed_demo`
464
+ any time to reset the sample data.
465
+
466
+ Visitors start **logged out** (sessions end at browser close), and the login
467
+ page comes pre-filled with the demo credentials (`admin` / `adminpass`) plus a
468
+ short tour of what each area shows — so a single click signs you in and the
469
+ sign-in-only pages (Contacts, Projects, the Django admin) become explorable.
470
+
471
+ ## Deployment
472
+
473
+ The demo is a twelve-factor **starter**: everything environment-specific is read
474
+ from the environment (a git-ignored `.env` in development — see `.env.example`).
475
+ Defaults are production-safe. To deploy:
476
+
477
+ ```bash
478
+ # Set in the environment: SECRET_KEY, DEBUG=False, ALLOWED_HOSTS,
479
+ # DATABASE_URL=postgres://… (and optionally EMAIL_URL, CSRF_TRUSTED_ORIGINS)
480
+ npm run build # compile front-end assets (Vite)
481
+ python manage.py collectstatic --noinput # WhiteNoise: compressed + hashed
482
+ gunicorn config.wsgi # WSGI server
483
+ ```
484
+
485
+ `DATABASE_URL` swaps SQLite → PostgreSQL (`psycopg[binary]`), `EMAIL_URL` swaps
486
+ the console backend → SMTP. With `DEBUG=False` the project automatically enables
487
+ HSTS, SSL redirect, secure cookies, and WhiteNoise's manifest static storage.
488
+
489
+ ## Upgrade to a Premium Dashboard
490
+
491
+ Need advanced features, more pages, and dedicated support? Explore Colorlib's collection of professional admin templates on [DashboardPack](https://dashboardpack.com/?utm_source=github&utm_medium=readme&utm_campaign=adminlte-django).
492
+
493
+ <table>
494
+ <tr>
495
+ <td align="center" width="50%">
496
+ <a href="https://dashboardpack.com/theme-details/apex-dashboard-nextjs/?utm_source=github&utm_medium=readme&utm_campaign=adminlte-django">
497
+ <img src="docs/screenshots/dashboardpack/apex.png" alt="Apex Dashboard — Next.js admin template with shadcn/ui" width="100%">
498
+ </a>
499
+ <br>
500
+ <a href="https://dashboardpack.com/theme-details/apex-dashboard-nextjs/?utm_source=github&utm_medium=readme&utm_campaign=adminlte-django"><strong>Apex Dashboard</strong></a>
501
+ <br>
502
+ <sub>Next.js 16 + React 19 + Tailwind CSS v4 + shadcn/ui. 5 dashboard variants, 20+ app pages, 125+ routes, full CRUD.</sub>
503
+ </td>
504
+ <td align="center" width="50%">
505
+ <a href="https://dashboardpack.com/theme-details/zenith-shadcn/?utm_source=github&utm_medium=readme&utm_campaign=adminlte-django">
506
+ <img src="docs/screenshots/dashboardpack/zenith.png" alt="Zenith — minimal Next.js admin dashboard with shadcn/ui" width="100%">
507
+ </a>
508
+ <br>
509
+ <a href="https://dashboardpack.com/theme-details/zenith-shadcn/?utm_source=github&utm_medium=readme&utm_campaign=adminlte-django"><strong>Zenith Dashboard</strong></a>
510
+ <br>
511
+ <sub>Next.js 16 + React 19 + Tailwind CSS v4 + shadcn/ui. Achromatic design, 50+ pages, 6 dashboards, live theme customizer.</sub>
512
+ </td>
513
+ </tr>
514
+ <tr>
515
+ <td align="center" width="50%">
516
+ <a href="https://dashboardpack.com/theme-details/haze-dashboard-nuxt/?utm_source=github&utm_medium=readme&utm_campaign=adminlte-django">
517
+ <img src="docs/screenshots/dashboardpack/haze.png" alt="Haze — Nuxt 4 admin dashboard with 92+ pages" width="100%">
518
+ </a>
519
+ <br>
520
+ <a href="https://dashboardpack.com/theme-details/haze-dashboard-nuxt/?utm_source=github&utm_medium=readme&utm_campaign=adminlte-django"><strong>Haze</strong></a>
521
+ <br>
522
+ <sub>Nuxt 4 + Nuxt UI v4 + Tailwind CSS v4. 92+ pages, 7 layouts, 5 dashboards, RTL, i18n, mock API layer.</sub>
523
+ </td>
524
+ <td align="center" width="50%">
525
+ <a href="https://dashboardpack.com/theme-details/tailpanel/?utm_source=github&utm_medium=readme&utm_campaign=adminlte-django">
526
+ <img src="docs/screenshots/dashboardpack/tailpanel.png" alt="TailPanel — React and Tailwind CSS admin panel" width="100%">
527
+ </a>
528
+ <br>
529
+ <a href="https://dashboardpack.com/theme-details/tailpanel/?utm_source=github&utm_medium=readme&utm_campaign=adminlte-django"><strong>TailPanel</strong></a>
530
+ <br>
531
+ <sub>React + TypeScript + Tailwind CSS + Vite. 9 dashboard designs, dark and light themes.</sub>
532
+ </td>
533
+ </tr>
534
+ <tr>
535
+ <td align="center" width="50%">
536
+ <a href="https://dashboardpack.com/theme-details/admindek-html/?utm_source=github&utm_medium=readme&utm_campaign=adminlte-django">
537
+ <img src="docs/screenshots/dashboardpack/admindek.png" alt="Admindek — feature-rich Bootstrap 5 dashboard" width="100%">
538
+ </a>
539
+ <br>
540
+ <a href="https://dashboardpack.com/theme-details/admindek-html/?utm_source=github&utm_medium=readme&utm_campaign=adminlte-django"><strong>Admindek</strong></a>
541
+ <br>
542
+ <sub>Bootstrap 5 + vanilla JS. 100+ components, dark/light modes, RTL support, 10 color presets.</sub>
543
+ </td>
544
+ <td align="center" width="50%">
545
+ <a href="https://dashboardpack.com/theme-details/svelteforge-premium/?utm_source=github&utm_medium=readme&utm_campaign=adminlte-django">
546
+ <img src="docs/screenshots/dashboardpack/svelteforge.png" alt="SvelteForge Premium — SvelteKit admin dashboard" width="100%">
547
+ </a>
548
+ <br>
549
+ <a href="https://dashboardpack.com/theme-details/svelteforge-premium/?utm_source=github&utm_medium=readme&utm_campaign=adminlte-django"><strong>SvelteForge Premium</strong></a>
550
+ <br>
551
+ <sub>SvelteKit + Tailwind CSS v4. 30+ wired-up modules, multi-tenant from row zero, dark/light/system mode.</sub>
552
+ </td>
553
+ </tr>
554
+ </table>
555
+
556
+ <p align="center">
557
+ <a href="https://dashboardpack.com/?utm_source=github&utm_medium=readme&utm_campaign=adminlte-django"><strong>View All Premium Templates →</strong></a>
558
+ </p>
559
+
560
+ ## License
561
+
562
+ MIT © [Colorlib](https://colorlib.com)
563
+
564
+ ## Resources
565
+
566
+ - [Django AdminLTE 4 documentation](https://django.adminlte.io/docs/)
567
+ - [AdminLTE](https://adminlte.io)
568
+ - [Django documentation](https://docs.djangoproject.com/)
569
+ - [Bootstrap 5 documentation](https://getbootstrap.com/docs/5.3/)
570
+ - [Bootstrap Icons](https://icons.getbootstrap.com/)
571
+
572
+ ## Support
573
+
574
+ For issues, feature requests, or questions:
575
+ - [GitHub Issues](https://github.com/ColorlibHQ/adminlte-django/issues)
576
+ - [GitHub Discussions](https://github.com/ColorlibHQ/adminlte-django/discussions)