如何在Django中显示动态生成的图像?

时间:2015-12-12 20:12:20

标签: python django

我有一个python Django项目,我正在生成大量图像并在前端显示它们。生成的每个图像都标记为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})

我试图找到一种方法,我可以在后台生成图像并在前端显示图像,因为它们是异步生成的,而不需要等待图像生成完成,因为它需要花费很多时间。你能告诉我如何在前端和后端做到这一点吗?这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

这里有两个Django片段可以帮助你创建一个数字for循环,这样每次循环1被添加到图像名称,所以你得到0.jpg,1.jpg等。你需要创建一个模板过滤器

  1. https://djangosnippets.org/snippets/1357/
  2. https://djangosnippets.org/snippets/779/
  3. 另一种解决方案是,如果你为该范围创建一个上下文字典,也许你可以获得已经保存了多少图像的count(),并且在你的视图中你会有这样的事情发生:

    ...
    render_to_response('foo.html', {..., 'range': range(10), ...}, ...)
    ...
    

    并在模板中:

    {% for i in range %}
            ...
    {% endfor %}
    

答案 1 :(得分:0)

您需要使用后台进程生成图像并将每个生成的图像链接保存到某个存储中。

您的第一个视图将触发生成过程并返回空白页面。然后,您需要另一个视图以某种格式返回生成的图像链接(即JSON)。从第一个视图开始,您可以通过AJAX轮询第二个视图,直到获得所有图像。