Кастомизация админки
Подробная информация про кастомизацию админки
Стандартный шаблон для отрисовки админки лежит тут: /venv/lib/python3.8/site-packages/django/contrib/admin/templates/admin/base_site.html
Если мы хотим внести изменения в этот шаблон, то необходимо создать новый файл base_site.html в папке mysite/templates/admin. Если мы создадим файл в этой папке, то Django будет использовать именно его при отрисовки админки.
Для вставки дополнительных стилей в админку нам необходимо в файл base_site.html добавить блок {% block extrastyle %}{% endblock %}. Также нам потребуется создать новый файл стилей admin.css в папке /mysite/mysite/static/css.
Таким образом нам нужно будет добавить в файл base_site.html следующий блок:
{% load static %}
{% block extrastyle %}
<link rel="stylesheet" href="{% static 'css/admin.css'%}">
{% endblock %}
Указываем нужные заголовки в Title и в звголовке админки
Для этого нужно в файле /news/admin.py добавить строки:
admin.site.site_title = 'Управление новостями'
admin.site.site_header = 'Управление новостями'
Добавляем изображение к списку новостей в админке
Для этого мы в файле admin.py добавим метод классу NewsAdmin:
def get_photo(self, obj):
if obj.photo:
return mark_safe(f'<img src="{obj.photo.url}" width="75">')
get_photo.short_description = 'Миниатюра' # название для колонки в админке
и добавим вызов этого метода в параметр list_display этого же класса:
list_display = ('id', 'title', 'category', 'created_at', 'updated_at', 'is_published', 'get_photo')
Не забудем импортировать функцию mark_safe:
from django.utils.safestring import mark_safe
Добавляем изображение при просмотре страницы конкретного объекта
Для этого мы в файле admin.py добавим параметры классу NewsAdmin:
fields = ('title', 'category', 'content', 'photo', 'get_photo', 'is_published', 'views', 'created_at', 'updated_at')
readonly_fields = ('get_photo', 'views', 'created_at', 'updated_at')
| Параметр | Описание |
|---|---|
| fields | Поля, которые мы выводим в админке |
| readonly_fields | Поля которые мы выводим в админке без возможности редактировать. Это также необходимо для вывода полей которые не могут быть редактируемыми и без указания их в этом поле Django выведет ошибку ValueError |