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.
- adminlte_django-0.1.0.dist-info/METADATA +576 -0
- adminlte_django-0.1.0.dist-info/RECORD +164 -0
- adminlte_django-0.1.0.dist-info/WHEEL +4 -0
- adminlte_django-0.1.0.dist-info/licenses/LICENSE +21 -0
- django_adminlte4/__init__.py +13 -0
- django_adminlte4/admin_menu.py +64 -0
- django_adminlte4/apps.py +26 -0
- django_adminlte4/checks.py +135 -0
- django_adminlte4/component_utils.py +105 -0
- django_adminlte4/components/__init__.py +0 -0
- django_adminlte4/components/form/__init__.py +0 -0
- django_adminlte4/components/form/button.html +3 -0
- django_adminlte4/components/form/button.py +35 -0
- django_adminlte4/components/form/input-color.html +5 -0
- django_adminlte4/components/form/input-file.html +5 -0
- django_adminlte4/components/form/input-switch.html +8 -0
- django_adminlte4/components/form/input.html +15 -0
- django_adminlte4/components/form/input.py +38 -0
- django_adminlte4/components/form/input_color.py +30 -0
- django_adminlte4/components/form/input_file.py +33 -0
- django_adminlte4/components/form/input_switch.py +35 -0
- django_adminlte4/components/form/select.html +7 -0
- django_adminlte4/components/form/select.py +34 -0
- django_adminlte4/components/form/textarea.html +5 -0
- django_adminlte4/components/form/textarea.py +29 -0
- django_adminlte4/components/tool/__init__.py +0 -0
- django_adminlte4/components/tool/chart.html +1 -0
- django_adminlte4/components/tool/chart.py +49 -0
- django_adminlte4/components/tool/datatable.html +1 -0
- django_adminlte4/components/tool/datatable.py +42 -0
- django_adminlte4/components/tool/editor.html +7 -0
- django_adminlte4/components/tool/editor.py +36 -0
- django_adminlte4/components/tool/modal.html +17 -0
- django_adminlte4/components/tool/modal.py +38 -0
- django_adminlte4/components/tool/sortable.html +3 -0
- django_adminlte4/components/tool/sortable.py +35 -0
- django_adminlte4/components/tool/vector-map.html +1 -0
- django_adminlte4/components/tool/vector_map.py +42 -0
- django_adminlte4/components/widget/__init__.py +0 -0
- django_adminlte4/components/widget/accordion.html +17 -0
- django_adminlte4/components/widget/accordion.py +38 -0
- django_adminlte4/components/widget/alert.html +5 -0
- django_adminlte4/components/widget/alert.py +28 -0
- django_adminlte4/components/widget/breadcrumb.html +10 -0
- django_adminlte4/components/widget/breadcrumb.py +19 -0
- django_adminlte4/components/widget/callout.html +4 -0
- django_adminlte4/components/widget/callout.py +18 -0
- django_adminlte4/components/widget/card.html +40 -0
- django_adminlte4/components/widget/card.py +48 -0
- django_adminlte4/components/widget/description-block.html +12 -0
- django_adminlte4/components/widget/description_block.py +28 -0
- django_adminlte4/components/widget/direct-chat.html +37 -0
- django_adminlte4/components/widget/direct_chat.py +30 -0
- django_adminlte4/components/widget/info-box.html +16 -0
- django_adminlte4/components/widget/info_box.py +32 -0
- django_adminlte4/components/widget/nav-messages.html +28 -0
- django_adminlte4/components/widget/nav-notifications.html +18 -0
- django_adminlte4/components/widget/nav_messages.py +24 -0
- django_adminlte4/components/widget/nav_notifications.py +25 -0
- django_adminlte4/components/widget/profile-card.html +21 -0
- django_adminlte4/components/widget/profile_card.py +30 -0
- django_adminlte4/components/widget/progress-group.html +9 -0
- django_adminlte4/components/widget/progress.html +5 -0
- django_adminlte4/components/widget/progress.py +35 -0
- django_adminlte4/components/widget/progress_group.py +26 -0
- django_adminlte4/components/widget/ratings.html +3 -0
- django_adminlte4/components/widget/ratings.py +32 -0
- django_adminlte4/components/widget/small-box.html +13 -0
- django_adminlte4/components/widget/small_box.py +25 -0
- django_adminlte4/components/widget/tabs.html +20 -0
- django_adminlte4/components/widget/tabs.py +40 -0
- django_adminlte4/components/widget/timeline.html +20 -0
- django_adminlte4/components/widget/timeline.py +25 -0
- django_adminlte4/components/widget/toast.html +10 -0
- django_adminlte4/components/widget/toast.py +30 -0
- django_adminlte4/conf.py +163 -0
- django_adminlte4/context_processors.py +71 -0
- django_adminlte4/forms.py +51 -0
- django_adminlte4/frontend/adminlte-plugins.js.stub +81 -0
- django_adminlte4/frontend/app.js.stub +29 -0
- django_adminlte4/frontend/app.scss.stub +12 -0
- django_adminlte4/frontend/package.json.stub +21 -0
- django_adminlte4/frontend/vite.config.stub.js +20 -0
- django_adminlte4/locale/es/LC_MESSAGES/django.mo +0 -0
- django_adminlte4/locale/es/LC_MESSAGES/django.po +330 -0
- django_adminlte4/management/__init__.py +0 -0
- django_adminlte4/management/commands/__init__.py +0 -0
- django_adminlte4/management/commands/adminlte_install.py +82 -0
- django_adminlte4/management/commands/adminlte_make_auth.py +95 -0
- django_adminlte4/management/commands/adminlte_scaffold.py +153 -0
- django_adminlte4/management/commands/adminlte_status.py +69 -0
- django_adminlte4/menu/__init__.py +3 -0
- django_adminlte4/menu/builder.py +84 -0
- django_adminlte4/menu/filters.py +221 -0
- django_adminlte4/menu/helpers.py +49 -0
- django_adminlte4/py.typed +0 -0
- django_adminlte4/static/adminlte/dist/css/adminlte-admin.css +41 -0
- django_adminlte4/static/adminlte/dist/css/adminlte.min.css +6 -0
- django_adminlte4/static/adminlte/dist/css/adminlte.overrides.css +33 -0
- django_adminlte4/static/adminlte/dist/css/adminlte.rtl.min.css +6 -0
- django_adminlte4/static/adminlte/dist/css/bootstrap-icons.min.css +5 -0
- django_adminlte4/static/adminlte/dist/css/fonts/bootstrap-icons.woff +0 -0
- django_adminlte4/static/adminlte/dist/css/fonts/bootstrap-icons.woff2 +0 -0
- django_adminlte4/static/adminlte/dist/css/overlayscrollbars.min.css +9 -0
- django_adminlte4/static/adminlte/dist/js/adminlte.init.js +74 -0
- django_adminlte4/static/adminlte/dist/js/adminlte.min.js +6 -0
- django_adminlte4/static/adminlte/dist/js/bootstrap.bundle.min.js +6 -0
- django_adminlte4/static/adminlte/dist/js/overlayscrollbars.browser.es6.min.js +10 -0
- django_adminlte4/static/adminlte/img/AdminLTELogo.png +0 -0
- django_adminlte4/static/adminlte/img/user1-128x128.jpg +0 -0
- django_adminlte4/templates/admin/base.html +170 -0
- django_adminlte4/templates/admin/base_site.html +6 -0
- django_adminlte4/templates/admin/login.html +64 -0
- django_adminlte4/templates/adminlte/auth/_form.html +17 -0
- django_adminlte4/templates/adminlte/auth/auth-master.html +31 -0
- django_adminlte4/templates/adminlte/auth/lockscreen.html +23 -0
- django_adminlte4/templates/adminlte/auth/login.html +55 -0
- django_adminlte4/templates/adminlte/auth/register.html +40 -0
- django_adminlte4/templates/adminlte/forms/_help_and_errors.html +6 -0
- django_adminlte4/templates/adminlte/forms/div.html +20 -0
- django_adminlte4/templates/adminlte/forms/field.html +23 -0
- django_adminlte4/templates/adminlte/master.html +51 -0
- django_adminlte4/templates/adminlte/page.html +21 -0
- django_adminlte4/templates/adminlte/partials/_assets_prebuilt.html +16 -0
- django_adminlte4/templates/adminlte/partials/_assets_vite.html +9 -0
- django_adminlte4/templates/adminlte/partials/_breadcrumb_items.html +8 -0
- django_adminlte4/templates/adminlte/partials/color-mode.html +30 -0
- django_adminlte4/templates/adminlte/partials/footer.html +7 -0
- django_adminlte4/templates/adminlte/partials/language-menu.html +30 -0
- django_adminlte4/templates/adminlte/partials/menu-item.html +41 -0
- django_adminlte4/templates/adminlte/partials/messages.html +15 -0
- django_adminlte4/templates/adminlte/partials/navbar-messages.html +28 -0
- django_adminlte4/templates/adminlte/partials/navbar-notifications.html +19 -0
- django_adminlte4/templates/adminlte/partials/navbar.html +61 -0
- django_adminlte4/templates/adminlte/partials/pagination.html +31 -0
- django_adminlte4/templates/adminlte/partials/preloader.html +6 -0
- django_adminlte4/templates/adminlte/partials/sidebar.html +41 -0
- django_adminlte4/templates/adminlte/partials/usermenu.html +56 -0
- django_adminlte4/templates/allauth/elements/alert.html +4 -0
- django_adminlte4/templates/allauth/elements/button.html +11 -0
- django_adminlte4/templates/allauth/elements/field.html +20 -0
- django_adminlte4/templates/allauth/elements/fields.html +23 -0
- django_adminlte4/templates/allauth/elements/form.html +9 -0
- django_adminlte4/templates/allauth/elements/h1.html +1 -0
- django_adminlte4/templates/allauth/elements/h2.html +1 -0
- django_adminlte4/templates/allauth/elements/hr.html +1 -0
- django_adminlte4/templates/allauth/elements/p.html +1 -0
- django_adminlte4/templates/allauth/elements/panel.html +8 -0
- django_adminlte4/templates/allauth/layouts/base.html +17 -0
- django_adminlte4/templates/allauth/layouts/entrance.html +16 -0
- django_adminlte4/templates/allauth/layouts/manage.html +16 -0
- django_adminlte4/templates/django_tables2/adminlte.html +17 -0
- django_adminlte4/templates/registration/logged_out.html +6 -0
- django_adminlte4/templates/registration/login.html +2 -0
- django_adminlte4/templates/registration/password_change_done.html +6 -0
- django_adminlte4/templates/registration/password_change_form.html +9 -0
- django_adminlte4/templates/registration/password_reset_complete.html +6 -0
- django_adminlte4/templates/registration/password_reset_confirm.html +14 -0
- django_adminlte4/templates/registration/password_reset_done.html +6 -0
- django_adminlte4/templates/registration/password_reset_email.html +10 -0
- django_adminlte4/templates/registration/password_reset_form.html +10 -0
- django_adminlte4/templates/registration/password_reset_subject.txt +1 -0
- django_adminlte4/templatetags/__init__.py +0 -0
- 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)
|
|
64
|
+
[](https://www.djangoproject.com/)
|
|
65
|
+
[](https://www.python.org/)
|
|
66
|
+
[](https://getbootstrap.com/docs/5.3/)
|
|
67
|
+
[](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)
|