# Пособия ## Общие опции Динамическая настройка вашего сайта на основе таблицы `django_admin_settings_options`. Поддерживаемые опции: - Название сайта - Заголовок сайта - Логотип сайта - Приветственный текст - Поле аватара - Отображение аватара ## Опции Эти опции находятся в вашей базе данных, названной `django_admin_settings_options`, после выполнения миграций. Вы также можете добавить свои собственные опции в эту таблицу и использовать их с помощью шаблонных тегов `adminlte_options` и функции `get_adminlte_option`. Таблица опций имеет поле действительности для контроля работы ваших опций. Пример: ``` # adminlte/general_option.html {% load adminlte_options %} # Здесь имя моего опции site_title, вы можете настроить его самостоятельно. {% get_adminlte_option 'site_title' as adminlte_site_title %} {% if adminlte_site_title.valid %} {{ adminlte_site_title.site_title }} {% else %} {{ site_title|default:_('Django site admin') }} {% endif %} ``` Перед созданием своих опций, вам следует знать, какие опции использует adminlte. - site_title - site_header - site_logo - welcome_sign - USE_CUSTOM_MENU - avatar_field - show_avatar ## ModelAdmin - Добавьте поддержку select2 для change_list фильтра - Настройте placeholder для search_fields ```python # adminlte/admin.py class ModelAdmin(admin.ModelAdmin): select2_list_filter = () search_field_placeholder = '' class Media: css = { "all": ("admin/components/select2/dist/css/select2.min.css",) } js = ( "admin/components/select2/dist/js/select2.min.js", ) def changelist_view(self, request, extra_context=None): view = super().changelist_view(request, extra_context) cl = view.context_data.get('cl') cl.search_field_placeholder = self.search_field_placeholder filter_specs = cl.filter_specs ``` for index, filter_spec in enumerate(filter_specs): if filter_spec.field_path in self.select2_list_filter: # флаг для использования Select2 filter_spec.display_select2 = True cl.filter_specs[index] = filter_spec view.context_data['cl'] = cl return view ``` ## Виджеты ### AdminlteSelect > С версии v1.5.0b0 вам больше не требуется модифицировать новый шаблон для активации Select2. Пример: ``` # adminlte/admin.py @admin.register(Menu) class MenuAdmin(TreeAdmin): ... # change_form_template = 'adminlte/menu_change_form.html' formfield_overrides = { models.ForeignKey: {'widget': AdminlteSelect} } ```# adminlte/menu_change_form.html # активация целевого селекта # {% extends 'admin/change_form.html' %} # {% block extrajs %} # {{ block.super }} # <script> # django.jQuery('#id_content_type').select2(); # </script> # {% endblock %} ``` Эффект:  ### AdminlteSelectMultiple > Начиная с версии v1.5.0b0 вам больше не требуется модифицировать новый шаблон для активации Select2. Пример: ``` # adminlte/admin.py @admin.register(Menu) class MenuAdmin(TreeAdmin): ... # change_form_template = 'adminlte/menu_change_form.html' formfield_overrides = { # множественный выбор для ManyToManyField models.ManyToManyField: {'widget': AdminlteSelectMultiple( attr={'style': 'width: 100%'} )} } # adminlte/menu_change_form.html # активация целевого селекта # {% extends 'admin/change_form.html' %} # # {% block extrajs %} # {{ block.super }} # <script> # django.jQuery('#id_content_type').select2(); # </script> # {% endblock %} ``` Эффект:  ## Меню Настройте свое меню в зависимости от базы данных и библиотеки TreeBeard.`глубина 2`, более глубинные уровни пока недействительны. ### Настройка меню Обменять меню путем нажатия кнопки "Обменять меню"  ### Форма меню  - имя: Название меню - позиция: Положение вашего пользовательского меню, по умолчанию `слева` - тип ссылки: 1. внутренняя: django urls 2. внешняя: ссылки третьих сторон 3. разделённая: разделённая ссылка, как название приложения verbose_name. - ссылка: 1. `admin:index`: имя django url, рекомендовано. 2. `/admin/`: внутренний django url, если вы используете i18n url, это не лучший вариант. 3. `http://`: внешняя ссылка - иконка: [иконка](https://adminlte.io/themes/AdminLTE/pages/UI/icons.html) - content_type: Используется для контроля прав доступа, если пользователь не имеет права доступа к `app_label:model` в content_type, он будет пропущен. - действителен: Элемент меню действителен только когда значение действителен равно True. - уровень приоритета: по умолчанию 100, используется для сортировки. `Чем больше число, тем выше приоритет`. - опции treebeard: для сортировки. ### Получить имя url в django для ссылки ```bash ╰─$ python manage.py shell Python 3.6.6 (default, Sep 29 2018, 19:18:41) Type 'copyright', 'credits' or 'license' for more information IPython 7.5.0 -- An enhanced Interactive Python. Type '?' for help. In [1]: from django.urls import resolve ```In [2]: resolve('/ru/admin/video/parsed/') Out[2]: ResolverMatch(func=django.contrib.admin.options.changelist_view, args=(), kwargs={}, url_name=video_parsed_changelist, app_names=['admin'], namespaces=['admin'], route=ru/admin/video/parsed/) ``` имя url в django = namespaces:url_name ## настройки в вашем setting.py `ADMINLTE_SETTINGS` ## пример Пример демонстрационных возможностей отключения/включения ```python ADMINLTE_SETTINGS = { 'demo': True, } ``` ## поиск Отключение/включение формы поиска ```python ADMINLTE_SETTINGS = { 'search_form': True, } ``` ## тема Выбор темы ```python ADMINLTE_SETTINGS = { 'skin': True, } ``` ## авторское право Кастомное сообщение об авторском праве ```python ADMINLTE_SETTINGS = { 'copyright': 'Иван Петров', } ``` ## расширенное навигационное меню Функционал расширенной навигации, где элементы навигации не скрываются под открываемым меню ```python ADMINLTE_SETTINGS = { 'navigation_expanded': True, } ``` ## показывать приложения ```python ADMINLTE_SETTINGS = { 'show_apps': ['django_admin_settings', 'auth', 'main'], } ``` ## основное навигационное приложение Основное навигационное приложение, где модели приложений располагаются в верхней части меню ```python ADMINLTE_SETTINGS = { 'main_navigation_app': 'django_admin_settings', } ``` ## приложения Модификация значков приложений и порядок приложений/моделей ```python ADMINLTE_SETTINGS = { 'apps': { 'example-app': { 'icon': 'fa-desktop', 'models': { 'example-model': { 'icon': 'fa-archive' }, 'example-model1': {} } }, 'auth': { 'icon': 'fa-users' } } } ```