如何在Django中处理动态图像?

时间:2016-02-27 22:47:00

标签: django database image

对于生产Django网站,其中包含多个基于用户输入数据生成图形/图像的应用程序,应如何处理这些图像?

  • 目前,每个图像都会在生成时存储到本地文件夹(例如-lnetpbmapp1/static/app1)文件夹中。

  • 然后使用app2/static/app2将图像复制到服务对象的中央文件夹(例如manage.py collectstatic)(即此文件夹为STATIC_ROOT)。

问题是动态生成时,主静态文件夹中显然找不到图像,因为我依靠main_app/static/app1将它们移动到STATIC_ROOT。

问题:

  • 是否应该从生产中的本地collectstatic文件夹提供动态图像(即更改STATIC_ROOT)?
  • 是否应将动态图像保存到主目录文件夹(例如main_app/static/app1)而不是依赖main_app/static/app1
  • 动态图像是否应该完全在生产中以其他方式处理?
为了清晰起见,

目录结构和图片位置:

collectstatic


上述基础是基于https://docs.djangoproject.com/en/1.8/howto/static-files/deployment/,但我的蜘蛛意识告诉我,我做错了。使用nginx和gunicorn进行制作。

作为一个新手,我对此并不多,所以我会欣赏一些关于术语的提示(即这些看起来似乎不是静态图像,但我发现动态图像很少在文档中。

1 个答案:

答案 0 :(得分:1)

我认为生成图像需要时间,因此在视图中创建用于生成图像的任务并将其传递给某个任务队列是个好主意,例如:芹菜。让它创建图像并将其保存到媒体文件夹,例如本地MEDIA_ROOT或某些远程存储(如亚马逊),并将其链接添加到使用此图像的django模型对象。然后,当请求视图时,它将在其他内容中返回这些图像的链接。 请参阅Managing Files

您的图片不是真正的静态文件,特别是如果它们随着时间的推移而“重新计算”。因此,在这种情况下,使用collectstatic的IMO不是最佳决策。