Администратор Django не будет загружать определенные статические файлы

#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 ?

Документ о новой функции nav_sidebar находится здесь

Комментарии:

1. Я не вносил никаких подобных изменений. И я должен был упомянуть, что ссылки отображаются в html на исходной странице, но в инструментах разработки Google Chrome я вижу ошибку 404 not found. Опять же, все остальные ресурсы загружаются правильно, и они находятся в том же каталоге вместе с этими файлами.