繁体   English   中英

我如何在 django 中提供 static 文件?

[英]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 (以前从未见过最后一个)。
当我运行我的服务器时,它仍然不使用 static 文件。
如何在不使用 apache 或 nginx 或类似的东西的情况下将我的 static 文件提供给我的服务器?

Django 在生产中不提供 static 文件,但它保持与它们的链接。 当您的调试在生产中为假时,这是一个名为 whitenoise 的 django 应用程序来救援的地方。 在您的 django 应用程序上安装 whitenoise: pip install whitenoise然后pip freeze > requirements.txt在此之后将此中间件添加到您的 Z62AD1C2A46AFB89A36DACC 项目设置

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

然后添加这一行

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

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

这是常见的 DigitalOcean 解决方案:

创建一个新空间并连接到它,例如通过MobaXterm

然后您可以访问文件存储,您基本上只是在 manage.py 目录中运行collectstatic

这是有关部署 Django 应用程序的官方 DigitalOcean 教程

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

DigitalOcean 空间在幕后使用 Amazon S3 存储桶,因此您可以直接设置一个存储桶并使用它,但对我来说,go 的艰难方式没有任何好处。 只需使用 DigitalOcean Space ,因为它与您的droplet完美链接。

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

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'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM