#python #django #static #admin #assets
#python #django #статический #администратор #активы
Вопрос:
У меня странная проблема, которая возникла в нескольких проектах django, и я пытаюсь ее исправить. По какой-то причине все статические файлы для области администрирования загружаются правильно, включая js, css и изображения, но 2 файла для боковой панели навигации (которые находятся в моем статическом каталоге вместе со всем остальным) не загружаются. Файлы — это nav_sidebar.css и nav_sidebar.js .
Я придумал обходной путь и добавил их в admins base.html шаблон и удалил ссылки на эти файлы. Это работает, но довольно смешно, что ему удается нормально загружать все другие статические ресурсы, но не эти конкретные файлы. У меня правильно настроен мой статический корень и каталоги, nginx указывает на правильный статический каталог, и я выполнил сбор статических данных и перезапустил сервер. Все, что я мог придумать, но это не работает.
Учитывая, что это произошло в 3 проектах подряд, я думаю, что это какая-то ошибка, а не ошибка с моей стороны.
Ответ №1:
Итак, в конце концов я смог ответить на свой собственный вопрос, и для всех, кто сталкивается с этой проблемой, вот шаги, которые я предпринял.
Для статических файлов администратора, прежде чем запускать сбор статических данных, они поступают непосредственно из того места, где находится ваш python (номер версии)/site-packages/django/contrib/admin/static. Если вы не запустите collect static или вручную не скопируете и не вставите их в свой каталог статических файлов, этих файлов администратора там не будет.
Теперь я уверен, что это базовые знания для любого пользователя django, и я даже сделал это, и ошибка все еще сохранялась. Что я обнаружил, так это то, что я настроил свои статические URL-адреса следующим образом:
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
И по какой-то причине django все еще получал файлы администратора из того же каталога, в котором находится источник django. Поэтому я просто изменил путь url и статический root на:
STATIC_URL = '/staticfiles/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
И побежал manage.py снова соберите статику, и это исправило мою админку, и теперь все работает правильно.
Ответ №2:
Эти два файла введены в django 3.1 для функции nav_sidebar. В admin/base.html , в нем говорится:
{% if not is_popup and is_nav_sidebar_enabled %}
<link rel="stylesheet" type="text/css" href="{% static "admin/css/nav_sidebar.css" %}">
<script src="{% static 'admin/js/nav_sidebar.js' %}" defer></script>
{% endif %}
is_nav_sidebar_enabled
по умолчанию включено. Вы поместили что-то в корень urls.py
, чтобы отключить это?
что-то вроде: admin.site.enable_nav_sidebar = False
в вашем корне urls.py
?
Комментарии:
1. Я не вносил никаких подобных изменений. И я должен был упомянуть, что ссылки отображаются в html на исходной странице, но в инструментах разработки Google Chrome я вижу ошибку 404 not found. Опять же, все остальные ресурсы загружаются правильно, и они находятся в том же каталоге вместе с этими файлами.