#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. Добавлена структура каталогов. Производство в порядке, просто у меня сейчас проблемы с местным развитием.