Как изменить название блока приложения в админке Django

Любой 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',
...
]

Вот и все.

One thought to “Как изменить название блока приложения в админке Django”

  1. Я недавно нашёл ваш сайт, перешёл с сайта про quake 2. Прикольно, что вы помимо игр увлекаетесь веб-разработкой. Я тоже люблю поиграть и делать сайты на PHP Laravel, ООП. И честно говоря я удивился когда увидел статьи про программирование на сайте про игры)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *