【发布时间】:2016-03-18 16:14:27
【问题描述】:
我正在尝试找到一种方法,可以在后台生成图像并在前端显示图像,因为它们是异步生成的,而无需等待图像生成完成,因为它会创建大量图像和我不希望浏览器等到生成所有图像的时间。你能告诉我如何在前端和后端做到这一点吗?正确的做法是什么?
图像标记为 0.png、1.png。每次生成的图像数量都不同。我最初不知道将生成的图像数量。图像保存在静态文件夹中。现在我的 index.html 模板中有。
{% load staticfiles %}
{% for plot in plots%}
{% with plot|add:".png" as image_static %}
<ul class="myList"><li><img src="{% static image_static %}" alt="My image"/></li></ul>
{% endwith %}
{% endfor %}
我的 views.py 如下所示
if request.method == 'POST':
count=Genplots.main() # main function to generate images
p=list(range(count)) #number of images
p=map(str,p)
return render_to_response("plots/index.html", { 'plots':p})
问题是这会等待所有图像生成,然后再将它们显示在前端。请帮忙。
【问题讨论】:
-
只显示占位符,然后在 dom 准备好后发送 ajax 请求,生成几个生成的缩略图和 url 到全尺寸图像...
-
嗨@madzohan,一旦生成图像,它会自动更新吗?你能澄清一下吗?另外我怎么知道图片的数量?
-
@sachinsrivastava,你能发帖
Genplots.main()吗? -
嗨@twil,谢谢您的回复。我实际上不能,因为它是专有的。但它基本上是一个脚本,它在循环中创建图并将其保存在文件夹中。在这种情况下是一个静态文件夹(我不确定这是否是正确的位置)。因此,它将创建一个绘图,将其保存为 .png,然后创建另一个,依此类推。
-
好吧,换位思考,我会使用 Celery 之类的东西来创建后台任务来生成这些图(在
Genplots.main()中运行任务)。然后我会从Genplots.main()返回一些图。然后 - 就像@madzohan 所说 - 在前端创建占位符和一些 JS 魔法来定期加载(测试)图像。当然我会使用媒体而不是静态文件夹。
标签: python django image asynchronous