Как переопределить страницу добавления в админ панеле Django?
Мне нужно добавить на страницу js скрипт, который будет рисовать и удалять HTML-элемент. Нужно, чтобы когда я выбирал элемент в выпадающем списке, рисовался другой выпадающий список или наоборот исчезал.Я знаю, как переопределять страницы в Django, но не могу найти нужную, которая отвечает за добавление новых объектов. Помогите найти её.
Если вы используете Django Debug Toolbar
, то вы можете просто перейти на нужную страницу админ-панели и во вкладке шаблоны посмотреть откуда загружается страница.
После того как вы нашли где находится эта страница (наиболее вероятно, что путь следующий venv/Lib/site-packages/django/contrib/admin/templates/admin/base_site.html
) :
По сути, вы можете внести изменения прямо в этот файл и это будет работать.
Но обычно для более качественной архитектуры приложения все файлы сформированные Django
для админ-панели оставляют нетронутыми и делают следующим образом:
- В корне проекта создаем папку
templates
. - В этой папке
templates
создаем подкаталогadmin
- В файле
settings.py
в переменнойTEMPLATES
в полеDIRS
прописываем путь к нашему шаблону:'DIRS': [os.path.join(BASE_DIR, 'templates')]
Теперь, если в этом подкаталоге разместить файл base_site.html
, то он уже будет переопределять файл, который использует Django
по дефолту.
Также дополнительная полезная информация:
Файл base_site.html
расширяет файл base.html
({% extends "admin/base.html" %}
), это значит, что в нем вы можете переопределить некоторые стили, которые используются в base.html
прямо внутри файла base_site.html
, например подгрузить ваш css
файл со стилями.
В интернете можно найти много различных ресурсов, которые предоставляют измененный вид админки, который как раз получается за счет переопределения файла стилей CSS
.
Выглядит это так:
{% load static %}
{% block extrastyle %}
<link rel="stylesheet" href="{% static 'css/admin.css' %}">
{% endblock %}
Этот файл уже помещается в каталоге static вашего приложения, а не проекта.
Подробно со всеми нюансами это написано в документации, если остались вопросы, то советую ознакомиться.