首页 > 解决方案 > 我可以使用 Django 动态覆盖静态文件吗?

问题描述

我正在建立一个 Heroku 站点来为一个学校项目部署一个 Django 应用程序。问题在于在 Django 中使用白噪声的静态文件。

快速上下文:我的应用程序包含一个表单,其中包含 4 个值,我用于在脚本中进行快速数学计算。该脚本的目的是执行计算,使用 matplotlib 绘制绘图并将其保存在我的 django 应用程序的静态文件夹中,如果它已经存在,则替换旧的。此静态文件用于在站点的 html 页面中显示。每次我提交一个新表单时,它就像一个更新情节的魅力。但是当我尝试使用 Heroku 时,它会抛出一个

[Errno 2] 没有这样的文件或目录:'/Users/jeff/Desktop/trydjango/src/static/yield_curve.png'

当我提交表格时。

这是settings.py我对静态文件的看法:


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

STATIC_URL = '/static/'

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

我的目录如下所示:

src
|-- /TER
|-- -- /settings.py
|-- /graph
|-- /static/...
|-- /staticfiles/... 
|-- /manage.py

每次我使用yield_curve.png保存在静态文件夹中的新表单提交表单时,我希望我的网站刷新图像。如果我不得不猜测,我会说这与静态文件必须是“静态的”并且不随时间变化的事实有关。

标签: djangopython-3.xheroku

解决方案


并将其保存在我的 django 应用程序的静态文件夹中,如果它已经存在,则替换旧的

是的,这可以通过 Django 实现。不,由于 Heroku 的临时文件系统,这在 Heroku 上是不可能的。您可以覆盖您的文件,但下次您的测功机重新启动时,该更改将丢失。这种情况经常发生(至少每天一次)。

Heroku官方建议将用户上传和静态文件存储在 Amazon S3 等第三方服务上。白噪声不同意。您可以在 Heroku 上使用 Whitenoise,但您不能(持久地)修改您的静态文件而不重新部署。

请注意,无论您的测功机使用何种计划,这都是正确的。免费或企业,dyno 文件系统是短暂的。


推荐阅读