django - 我可以使用 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
保存在静态文件夹中的新表单提交表单时,我希望我的网站刷新图像。如果我不得不猜测,我会说这与静态文件必须是“静态的”并且不随时间变化的事实有关。
解决方案
并将其保存在我的 django 应用程序的静态文件夹中,如果它已经存在,则替换旧的
是的,这可以通过 Django 实现。不,由于 Heroku 的临时文件系统,这在 Heroku 上是不可能的。您可以覆盖您的文件,但下次您的测功机重新启动时,该更改将丢失。这种情况经常发生(至少每天一次)。
Heroku官方建议将用户上传和静态文件存储在 Amazon S3 等第三方服务上。白噪声不同意。您可以在 Heroku 上使用 Whitenoise,但您不能(持久地)修改您的静态文件而不重新部署。
请注意,无论您的测功机使用何种计划,这都是正确的。免费或企业,dyno 文件系统是短暂的。
推荐阅读
- android - ReactPropGroup 的示例
- google-assistant-sdk - google-library 1.0.1 更新后的分段错误
- angular - 为什么在延迟加载的模块中主题观察者不更新?
- html - 垂直对齐内
- php - Laravel - 如何按 ID 升序对对象数组进行排序
- python - 我需要向 cx_Freeze.Executable 发送一个参数
- ms-access - Ms Access 另存为图片 JPG
- linux - 如何从 GO 读取转储流捕获?
- javascript - 在类的最后一个实例之后动态插入 html 元素
- angular - 使用 Angular 延迟加载模块设置默认路由