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

时间:2016-04-21 05:39:16

标签: python django

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

  

您正在使用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'

4 个答案:

答案 0 :(得分:20)

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

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

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

./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.pysettings/production.py ...

等文件
# Production settings
from settings.base import *
DEBUG = False
DATABASES = …

答案 1 :(得分:8)

如果您使用的是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:

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

答案 2 :(得分:2)

将STATIC_ROOT设置设置为您要为其提供这些文件的目录,例如:

STATIC_ROOT =&#34; /var/www/example.com/static /"

您正在使用的设置用于开发。查看Django文档以获取更多信息here

答案 3 :(得分:0)

用于静态资产的 Django 设置可能有点难以配置和调试。但是,如果您只是将以下设置添加到 settings.py 中,则一切都应该完全按预期工作:

<块引用>

转到“settings.py”添加以下代码

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.9/howto/static-files/
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATIC_URL = '/static/'

# Extra places for collectstatic to find static files.
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

查看示例 settings.py on GitHub 的完整版本。

<块引用>

现在在根目录下创建静态文件夹,里面有一个随机文件

Django 不会自动创建 collectstatic 使用的目标目录 (STATIC_ROOT),如果它不可用。您可能需要在代码库中创建此目录,以便在运行 collectstatic 时可用。 Git 不支持空文件目录,因此您还必须在该目录中创建一个文件。

更多参考:https://devcenter.heroku.com/articles/django-assets