Python Django:您没有设置STATIC_ROOT设置就使用了staticfiles应用程序

Hen*_*Zhu 15 python django

我正在尝试将我的Django应用程序部署到Web,但是我收到以下错误:

您没有将STATIC_ROOT设置设置为文件系统路径,而是使用staticfiles应用程序

但是,我在我的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'
Run Code Online (Sandbox Code Playgroud)

小智 30

如果您正在使用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__)))
Run Code Online (Sandbox Code Playgroud)

因此,您可以像这样轻松设置静态:

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
Run Code Online (Sandbox Code Playgroud)


Thi*_*t J 21

什么是production.py文件?你如何导入你的设置?

根据您获得此错误的方式(通过wsgi服务器或命令行提供django),检查manage.pywsgi.py查看默认设置文件的名称.

如果要手动设置要使用的设置,请使用以下内容:

./manage.py --settings=production
Run Code Online (Sandbox Code Playgroud)

哪个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')
Run Code Online (Sandbox Code Playgroud)

文件如settings/local.py,settings/production.py...

# Production settings
from settings.base import *
DEBUG = False
DATABASES = …
Run Code Online (Sandbox Code Playgroud)