我如何在 Django 中提供静态文件?

How can i serve static files in django?

我有一个文件夹 static:

static
-->css
----> main.css
-->images
----> image.png

Settings.py:

STATICFILES_DIRS=[
    os.path.join(BASE_DIR, "static"),
]

STATIC_URL = '/static/'

STATIC_ROOT = os.path.join(BASE_DIR, "static_cdn")

我运行collectstatic
现在我在 static_cdn 中有:imagescssadmin(之前从未见过最后一个)。
当我 运行 我的服务器时,它仍然不使用静态文件。
如何在不使用 apache 或 nginx 或类似东西的情况下将我的静态文件提供给我的服务器?

要在生产环境中存储静态文件,您将需要 S3 存储桶或其他类型的外部存储。我喜欢在部署到 Heroku 时使用 whitenoise,因为它使用起来非常简单。下面是一个配置示例:

MIDDLEWARE = [
    # ...
    'whitenoise.middleware.WhiteNoiseMiddleware',

]

# ...

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'build/static')
]
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

Django 不会在生产环境中提供静态文件,但会保留 link 给它们。当您的调试在生产环境中为假时,这里是一个名为 whitenoise 的 django 应用程序可以拯救的地方。 在你的 django 应用程序上安装 whitenoise: pip install whitenoise 然后 pip freeze > requirements.txt 在此之后将此中间件添加到您的 django 项目设置

MIDDLEWARE = [
  # 'django.middleware.security.SecurityMiddleware',
  'whitenoise.middleware.WhiteNoiseMiddleware',
  # ...
]

然后添加这一行

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

然后将此代码推送到您的生产服务器并确保您 运行 collectstatic 命令即 python manage.py collectstatic 您的静态文件现在应该可以正常工作了。

这是常见的 DigitalOcean 解决方案:

新建 space and connect to it e.g. via MobaXterm.

然后您就可以访问 manage.py 目录中基本上 运行 collectstatic 的文件存储。

这是一个official DigitalOcean Tutorial on deploying Django apps

使用 DigitalOcean 部署时,您将需要 nginx。

DigitalOcean 空间在幕后与 Amazon S3 Bucket 一起工作,因此您可以直接设置一个存储桶并使用它,但对我来说,走艰难的道路没有任何好处。只需使用 DigitalOcean Space,因为它与您的 droplet.

完美链接