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')