Python Django: вы используете приложение staticfiles, не устанавливая параметр STATIC_ROOT
Я пытаюсь развернуть приложение Django в Интернете, но я получаю следующую ошибку:
Вы используете приложение staticfiles без установки STATIC_ROOT установка пути к файловой системе
Однако, я сделал это в production.py:
from django.conf import settings
DEBUG = False
TEMPLATE_DEBUG = True
DATABASES = settings.DATABASES
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static')
# Update database configuration with $DATABASE_URL.
import dj_database_url
db_from_env = dj_database_url.config(conn_max_age=500)
DATABASES['default'].update(db_from_env)
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.9/howto/static-files/
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
STATIC_URL = '/static/'
# Extra places for collectstatic to find static files.
STATICFILES_DIRS = (
os.path.join(PROJECT_ROOT, 'static'),
)
# Simplified static file serving.
# https://warehouse.python.org/project/whitenoise/
STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'
Ответы
Ответ 1
Что такое production.py
файл? Как импортировать свои настройки?
В зависимости от того, как вы получили эту ошибку (обслуживая django через сервер wsgi или в командной строке), проверьте manage.py
или wsgi.py
, чтобы узнать, что является именем файла настроек по умолчанию.
Если вы хотите, чтобы все настройки были использованы, используйте что-то вроде этого:
./manage.py --settings=production
Где production
- любой модуль python.
Кроме того, ваш файл настроек не должен импортировать что-либо связанное с django. Если вы хотите разделить свои настройки для разных сред, используйте что-то вроде этого.
Файл settings/base.py
# All settings common to all environments
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static')
Файлы типа settings/local.py
, settings/production.py
...
# Production settings
from settings.base import *
DEBUG = False
DATABASES = …
Ответ 2
Установите параметр STATIC_ROOT в каталог, из которого вы хотите обслуживать эти файлы, например:
STATIC_ROOT = "/var/www/example.com/static/"
Настройки, которые вы используете, предназначены для разработки. Ознакомьтесь с документами Django для получения дополнительной информации здесь
Ответ 3
Если вы используете Django 2.2
или выше, в вашем файле настроек уже есть строка, подобная этой:
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
Следовательно, вы можете легко установить статический режим следующим образом:
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')