Кастомизация админки
Подробная информация про кастомизацию админки
Стандартный шаблон для отрисовки админки лежит тут: /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 |