Любой Django-проект состоит из набра приложений, многие из которых доступны в интерфейсе адмнистратора (админке). И в качестве названия блока, по-умолчанию беретсяимя каталога приложения. И в принципе все эти ‘Products’, ‘Orders’, ‘Entries’, etc — выглядят не так уж и плохо. Но не для всех.
Для тех, кто хочет видеть в админке Django более «приятные глазу» и осмысленные заголовки блоков — всё вполне легко можно изменить.
В состав каждого django-приложения, создаваемом командой django-admin startapp <app_name> включается модуль apps.py, в котором генерируется минимально-базовый класс конфигурации приложения. Этот класс, наследуется от класса AppConfig из модуля django.apps, и может иметь аттрибуты, переопределяющие оны из класса-предка.
Например в проекте имеется приложение ‘products’, но нам надо чтобы в интерфейса администратора оно отображалось как «Товары и заказы». Открываем файл «apps.py» в каталоге приложения, и видим что-то типа этого:
from django.apps import AppConfig class ProductsConfig(AppConfig): name = 'products'
Добавим всего один аттрибут в этот класс
verbose_name = "Товары и заказы"
и после этого название блока приложения в админке будет изменено.
При необходимости можно задействовать средста интернационализации Django, чтобы получить переведенные осмысленные названия приложений в админке для каждого поддерживаемого в пректе языка. Просто импортируем gettext_lazy з модуля django.utils.translation и оборачиваем ей значение атрибута verbose_name.
from django.apps import AppConfig from django.utils.translation import gettext_lazy as _ class ProductsConfig(AppConfig): name = 'products' verbose_name = _("Товары и заказы")
А как быть с названиями используемых сторонних приложений?
Тут тоже все несложно. Начиная с Django версии 3 приложения в список INSTALLED_APPS можно добавлять не только по имени python-пакета, но и указывая полный путь до класса-потом AppConfig.
INSTALLED_APPS = [ ... 'django.contrib.auth.apps.AuthConfig', ... ]
И теперь чтобы изменить название стороннего django-приложения, достаточно в своём коде импортировать его AppConfig-класс, отнаследоваться от последнего и указать новый класс для нужного приложения в INSTALLED_APPS.
Ниже пример использования данного подхода к стандартнопу приложению ‘django.contrib.auth‘ (реалищовать можно в модуле apps любого вашего приложения, входящего в проект):
from django.contrib.auth.apps import AuthConfig from django.utils.translation import gettext_lazy as _ class UsersAuthConfig(AuthConfig): verbose_name = _("Группы пользователей")
В список INSTALLED_APPS вместо стандартного приложения указываем новый конфиг:
INSTALLED_APPS = [ ... # 'django.contrib.auth', 'your_app_name.apps.UsersAuthConfig', ... ]
Вот и все.
Я недавно нашёл ваш сайт, перешёл с сайта про quake 2. Прикольно, что вы помимо игр увлекаетесь веб-разработкой. Я тоже люблю поиграть и делать сайты на PHP Laravel, ООП. И честно говоря я удивился когда увидел статьи про программирование на сайте про игры)