【问题标题】:How to get images displayed asynchrnously in Django, Python?如何在 Django、Python 中异步显示图像?
【发布时间】: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


【解决方案1】:

你不能。这些模板在服务器上呈现,所以当您的浏览器收到 HTML 时,它已经有加载图像的命令。

你需要用 JavaScript 来完成这个 - 比如lazyload

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    相关资源
    最近更新 更多