Локальная разработка Статические файлы Django, поступающие из каталога библиотеки, а не из моего проекта

#django #python-3.7 #django-staticfiles #django-3.1

Вопрос:

У меня есть приложение Django (3.1), которое я настроил для обслуживания статических файлов, то есть myapp/settings.py имеет

 DEBUG = True
 

.
.
.

 INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp',
    .
    .
    .
]
 

.
.
.

 STATIC_URL = '/static/'

STATIC_ROOT = 'static/'
 

Но вместо того, чтобы обслуживать файлы из static каталога myapp, он обслуживает статические файлы из /Library/Python/3.7/site-packages/django/contrib/admin/static/ . Я проверил это, добавив файлы в оба каталога,

 ~/Projects/myapp/static/file-from-project.js
/Library/Python/3.7/site-packages/django/contrib/admin/static/file-from-library.js
 

и затем

 python3 manage.py runserver
 

с шаблоном, включающим строки

 <script src="{% static 'file-from-project.js' %}"></script>
<script src="{% static 'file-from-library.js' %}"></script>
 

и file-from-library.js загружается нормально, но я получаю 404 за file-from-project.js . Что я здесь делаю не так?

Структура каталогов со ссылочными файлами:

 myapp
  /myapp
    settings.py
    .
    .
    .
  /static
    file-from-project.js
    .
    .
    .
  /templates
    .
    .
    .
  manage.py
  .
  .
  .
 

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

1. Куда ты положил file-from-project ?

2. @michjnich Вошел ~/Projects/myapp/static/file-from-project.js , и я бегу из ~/Projects/myapp/ каталога.

Ответ №1:

Хорошо, я вижу проблему, я думаю.

STATIC_ROOT это абсолютный путь, а не относительный. если вы установите его, например. BASE_DIR / "static" ты можешь получить то, что хочешь.

Я обычно ставлю BASE_DIR в верхней части своего settings.py , так как он используется для нескольких вещей:

 BASE_DIR = Path(__file__).resolve(strict=True).parent.parent
 

Другое дело, что у вас есть, а это значит, что он будет просматривать ваши данные в разделе «Ваши приложения». DEBUG=True STATIC_URL Если вы переместите файл в:

 ~/Projects/myapp/static/app_folder/file-from-project.js
 

Это должно сработать 🙂

Правка: Я заметил myapp , что это приложение, а не название проекта, что заставляет меня задуматься о том, как называется проект.

Ваши статические файлы для разработки для этой структуры, вероятно, должны находиться в:

 ~/Projects/myapp/static/myapp/<static file>
 

При развертывании, очевидно DEBUG , должно быть False , но здесь вы должны запустить collectstatic , чтобы собрать все статические файлы в одном месте для развертывания.

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

1. BASE_DIR по умолчанию установлено таким образом, но переход в ~/Projects/myapp/myapp/static/file-from-project.js не помог. Или вы имеете в виду что-то другое app_folder ?

2. Кроме того, изменение на STATIC_ROOT = os.path.join(BASE_DIR, 'static') не влияет на то, откуда что-то берется.

3. Я имею в виду, что в вашем пути myapp указано имя вашего проекта django, тогда этот проект содержит приложения django, каждое из которых потенциально имеет свои собственные статические файлы.

4. Ах, подождите, myapp я вижу ваше приложение из INSTALLED_APPS . Как тогда называется ваш проект django? Нет Projects ??? Возможно, вы можете опубликовать свою структуру каталогов?

5. Добавлена структура каталогов. Производство в порядке, просто у меня сейчас проблемы с местным развитием.