Утверждение о том, что каждый разработчик Django доволен предустановленной панелью администратора, довольно спорное. Предлагаю рассмотреть альтернативный вариант.
Несмотря на то, что одним из значительных преимуществ Django является возможность быстрой разработки с нуля, вид базовой админ-панели может не соответствовать текущему облику и состоянию страницы Django в целом.
Если вы хотите усовершенствовать панель администратора, но у вас нет времени на полную настройку путем создания собственных пользовательских представлений, то рекомендую воспользоваться django-jet-reboot
.
Django Jet Reboot — это обновление изначального шаблона Django Jet, позволяющего максимально легко улучшить общий внешний вид админ-панели.
Перед продолжением работы обратим внимание на два обстоятельства.
1)
django-jet-reboot
поддерживает только Django >= 3.0 и Python >= 3.7.
2) Данная библиотека и
django-jet
имеют строго свободную лицензию AGPLv3. Хотя Django Jet предлагает еще и коммерческую лицензию за 65$ (один проект).
За работу
- Скачиваем и устанавливаем последнюю версию
django-jet-reboot
с помощьюpip
:
pip install django-jet-reboot
2. Добавляем его в раздел INSTALLED_APPS
настроек Django (файл settings.py
).
Важно: он должен предшествовать
django.contrib.admin
.
INSTALLED_APPS = (
...
'jet',
'django.contrib.admin',
)
3. Проверяем, чтобы контекстный процессор django.template.context_processors.request
был указан в settings.py
:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
...
'django.template.context_processors.request',
...
],
},
},
]
4. Добавляем URL-шаблон Django Jet в файл urls
проекта:
urlpatterns = patterns(
'',
path('jet/', include('jet.urls', 'jet')), # URL-адреса Django JET
path('admin/', include(admin.site.urls)),
...
)
5. Выполняем команду migrate
для создания таблиц базы данных:
python manage.py migrate jet
Можете пропустить следующий шаг, если вы работаете не в среде продакшн.
Выполняем collectstatic
:
python manage.py collectstatic
Чистим кэш браузера и тестируем!
Если все успешно сработало, увидим страницу авторизации Django Jet по URL-адресу /admin
:
Пока не авторизуйтесь, есть вариант получше.
Чтобы воспользоваться всеми преимуществами библиотеки, стоит установить приложение Django Jet Dashboard.
6. Добавляем приложение jet.dashboard
в файл settings.py
:
INSTALLED_APPS = (
...
'jet.dashboard',
'jet',
'django.contrib.admin',
...
)
7. Добавляем urls
приложения jet.dashboard
в главный файл urls
:
urlpatterns = patterns(
'',
path('jet/', include('jet.urls', 'jet')), # URL-адреса Django JET
path('jet/dashboard/', include('jet.dashboard.urls', 'jet-dashboard')), # URL-адреса Django JET dashboard
path('admin/', include(admin.site.urls)),
...
)
8. Создаем модели (снова…):
python manage.py migrate dashboard
Можете пропустить следующий шаг, если вы работаете не в среде продакшн.
Выполняем collectstatic
(снова…).
python manage.py collectstatic
Вот теперь можно войти в админ-панель и посмотреть!
Переходим к индивидуальным настройкам.
Настраиваемые опции
Эта часть взята из django-jet
. Опции конфигурации предоставлены в файле settings.py
.
Тема
Jet предлагает 6 тем:
- по умолчанию;
- зеленую;
- светло-фиолетовую;
- светло-зеленую;
- голубую;
- светло-серую.
Для установки новой темы просто добавляем JET_DEFAULT_THEME
в настройки:
JET_DEFAULT_THEME = 'light-gray'
Пользователь может динамически выбрать тему. Для этого нужно добавить список возможных тем в settings.py
:
JET_THEMES = [
{
'theme': 'default', # название папки с темой
'color': '#47bac1', # цвет кнопки выбора темы в пользовательском меню
'title': 'Default' # название темы
},
{
'theme': 'green',
'color': '#44b78b',
'title': 'Green'
},
{
'theme': 'light-green',
'color': '#2faa60',
'title': 'Light Green'
},
{
'theme': 'light-violet',
'color': '#a464c4',
'title': 'Light Violet'
},
{
'theme': 'light-blue',
'color': '#5EADDE',
'title': 'Light Blue'
},
{
'theme': 'light-gray',
'color': '#222',
'title': 'Light Gray'
}
]
Пользователям предоставляется выбор:
С помощью Jet вы также можете внести собственные цветовые схемы, добавив новую папку в /static/jet/css/themes/<my_theme>
.
Согласно документации в качестве примера можно использовать папку /jet/static/jet/css/themes/light-violet/
.
_variables.scss
содержит все настраиваемые переменные.
Для применения собственной темы необходимо собрать все файлы .scss
в каталоге theme
.
Меню
Меню можно сделать компактным или расширенным, как показано ниже:
JET_SIDE_MENU_COMPACT = True
По умолчанию JET
отображает все приложения и их модели в боковом меню в алфавитном порядке. Формат хороший, но для большинства проектов он не подходит. Дело в том, что в первую очередь пользователь предпочитает иметь под рукой приоритетные для него модели.
Настроим элементы меню.
Воспользуемся JET_SIDE_MENU_ITEMS
в settings.py
для отображения нужных приложений и моделей или изменения их порядка:
JET_SIDE_MENU_ITEMS = [ # Список приложений или пользовательских элементов dict
{'label': _('General'), 'app_label': 'core', 'items': [
{'name': 'help.question'},
{'name': 'pages.page', 'label': _('Static page')},
{'name': 'city'},
{'name': 'validationcode'},
{'label': _('Analytics'), 'url': 'http://example.com', 'url_blank': True},
]},
{'label': _('Users'), 'items': [
{'name': 'core.user'},
{'name': 'auth.group'},
{'name': 'core.userprofile', 'permissions': ['core.user']},
]},
{'app_label': 'banners', 'items': [
{'name': 'banner'},
{'name': 'bannertype'},
]},
]
Каждый элемент имеет следующие ключи:
app_label
— имя приложения (имя приложения Django);label
— текстовая метка приложения;items
— список дочерних элементов;url
— пользовательский URL (формат описан ниже);url_blank
— открытие URL в новой таблице (логическое значение);permissions
— список необходимых разрешений для отображения элемента.
Обязательно требуется поле items
, а также app_label
или label
. Стоит только допустить ошибки в их определении, и никакого меню в портале мы не увидим.
Каждый элемент меню также представляет собой словарь dict
с указанными ниже ключами:
name
— имя модели (возможен как вариантMODEL_NAME
, такAPP_LABEL.MODEL_NAME
);label
— текстовая метка элемента;url
— пользовательский URL (формат описан ниже);url_blank
— открытие URL в новой таблице (логическое значение);permissions
— список необходимых разрешений для отображения элемента.
Для элементов в обязательном порядке устанавливается name
или label
. Соблюдается очередность элементов.
С полным списком настраиваемых элементов можно ознакомиться на странице документации. Учитывая ограниченный формат статьи, мы рассмотрели не все возможности конфигурации. Интерес также представляет функциональность автозаполнения полей поиска и фильтров админ-панели.
Заключение
Стоит ли игра свеч? Конечно да, в условиях нехватки времени на создание собственной пользовательской панели. Именно поэтому мы часто выбираем Django, чтобы быстро создать MVP или прототип.
Если у вас есть время и потребность в настоящей пользовательской админ-панели, рекомендую самостоятельно создать представления и переписать предустановленную панель. Django особенно хорош тем, что все эти представления являются настраиваемыми. Именно для таких целей как нельзя лучше подходят такие пакеты, как django-jet
.
В целом, Jet предоставляет широкие возможности для индивидуальной настройки панели администратора, вследствие чего она выгодно отличается по внешнему виду от предустановленного аналога.
Читайте также:
- Как загружать файлы и изображения в приложении Django
- Django Google SEO: поисковая оптимизация сайта на Python для индексации в Google
- Python Django и OSRM: маршрут на интерактивной онлайн-карте
Читайте нас в Telegram, VK и Яндекс.Дзен
Перевод статьи Nacho Vargas: Improve Your Django Admin Panel With Django Jet