使用 Django 在 html 文件中绘制图表

2024-01-02

我正在使用 Django 做一个监控系统。在我的视图文件中,我定义了一个名为 showImage 的类,它收集使用 matplotlib 绘制图形所需的信息。

一开始,我只是将图像存储在字符串缓冲区中,以用 HttpResponse 表示它:

buffer = StringIO.StringIO()
canvas = pylab.get_current_fig_manager().canvas
canvas.draw()
pilImage = PIL.Image.fromstring("RGB", canvas.get_width_height(), canvas.tostring_rgb())
pilImage.save(buffer, "PNG")

# Send buffer in a http response the the browser with the mime type image/png set
return HttpResponse(buffer.getvalue(), mimetype="image/png")

但是,我需要在 html 文件中实现一些 javaScript 以添加更多应用程序。因此,我决定将图像保存在变量中并将其绘制在 html 文件中:

# serialize to HTTP response
response = HttpResponse(buffer.getvalue(), mimetype="image/png")   
return render_to_response('eQL/dev/showImage.html', {'response':response})

我的问题是我真的不知道如何在 html 文件中表示它,因为我没有找到任何示例。有谁知道答案吗?

提前致谢!


您的意思是,在您的第一个实现中,您的响应是 PNG 文件,但现在您希望将响应改为包含图像的 HTML 文件?

首先,您需要更改响应 MIME 类型image/png to text/html或类似的。

其次,我不确定为什么要将 HttpResponse 对象(包含 PNG 数据)传递到模板中。模板能读懂吗?当然,您只想传递原始 PNG 数据,而不是 HttpResponse 对象。

最后说说怎么做。您可能知道,HTML 不太擅长嵌入图像。与普通网站一样,您可以在页面中包含文本,但如果您想要图像,则需要一个单独的文件并使用<img src="..." />元素。动态地做到这一点很棘手:这意味着您需要设置两个单独的 URL(一个用于 PNG,一个用于 HTML),它们彼此独立运行(您不能只有一段代码;您需要一个处理程序一个用于生成 PNG,另一个用于生成 HTML),并具有指向 PNG URL 的 HTML 链接。

如果这太难了,还有另一种方法,但它有点hacky:数据 URL http://en.wikipedia.org/wiki/Data_URI_scheme。它们允许您包含图像数据在 HTML 页面本身中,因此您只需产生一个响应。不幸的是,Internet Explorer 9 之前的版本并没有很好地支持它。 IE8支持小于32K的图片,IE7及以下不支持。请参阅维基百科上的示例 - 您的目标是生成如下内容:

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot" />

基本上,获取 PNG 数据,然后对其进行 Base64 编码(使用 Python 的base64 http://docs.python.org/library/base64.html图书馆)。然后只需输入“data:image/png;base64," ,并将其设置为 img src 的 URL。换句话说,将 Base64 编码的字符串传递给 Django 的模板引擎,并将 URL 构造为模板中 img 标签的一部分。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Django 在 html 文件中绘制图表 的相关文章

  • 可以用 Django 制作移动应用程序吗?

    我想知道我是否可以在我的网站上使用 Django 代码 并以某种方式在移动应用程序 Flutter 等框架中使用它 那么是否可以使用我现在拥有的 Django 后端并在移动应用程序中使用它 所以就像models views etc 是的 有
  • django-admin.py makemessages 不起作用

    我正在尝试翻译一个字符串 load i18n trans Well Hello there how are you to Hola amigo que tal 我的 settings py 文件有这样的内容 LOCALE PATHS os
  • Django 管理列降序排序

    当使用 Django admin 时格拉佩利 https github com sehmaschine django grappelli我希望单击列标题即可按降序对表格进行排序 我不希望通过在模型元类中定义排序字段来对列进行默认排序 默认行
  • 如何在 Django Rest Framework 中将当前用户设置为用户字段?

    我有以下代码完美运行 我可以创建一个Post通过选择图像和用户从 DRF 面板中获取对象 但是我希望 DRF 由当前登录的用户填充用户字段 模型 py class Post TimeStamped user models ForeignKe
  • 我应该在什么模型中添加ManyToManyField?

    我读了有关多对多关系的文档 https docs djangoproject com en dev ref models fields ref manytomany和examples https docs djangoproject com
  • Django 模型:如何使用 mixin 类来覆盖 django 模型以实现 save 等功能

    我想在每次保存模型之前验证值 所以 我必须重写保存函数 代码几乎是一样的 我想把它写在 mixin 类中 但失败了 我不知道如何写 super func 我英语不好 抱歉 class SyncableMixin object def sav
  • 如何添加身份验证中间件 JWT django?

    我正在尝试创建一个中间件来使用 JWT 进行身份验证 但在视图中 request user 始终是 AnonymUser 当我验证中间件通过用户模型更改 request user 时 确实如此 但在到达视图时 由于某种原因 request
  • 基于连接表的 Django 过滤器

    我有两张桌子 class Client models Model name models TextField lastname models TextField class Meta managed False db table clien
  • 让 Pytest 在 Django cookiecutter / Python 3.x 项目中运行

    我正在建造一个新的cookiecutter django https github com pydanny cookiecutter django项目 这里有本地设置说明 http cookiecutter django readthedo
  • Django 营业时间

    我想添加诊所的营业时间 我已经对此进行了调查在 Django 中实现 开放时间 的任何现有解决方案 https stackoverflow com questions 8128143 any existing solution to imp
  • 在一个视图中使用两个模板

    我尝试以两种方式呈现视图中的内容 html 和 csv 下载 我能够做到这一点的唯一方法是使用两种不同的视图 一种用于 html 演示 一种用于 csv 这重复了我的代码 我正在寻找更优雅的解决方案 有什么建议么 这是示例代码 views
  • django 中计数器的原子增量

    我正在尝试自动增加 Django 中的一个简单计数器 我的代码如下所示 from models import Counter from django db import transaction transaction commit on s
  • 在 Django 中使用 prefetch_lated 连接 ManyToMany 字段

    我可能遗漏了一些明显的东西 但我在连接 ManyToMany 字段以在 Django 应用程序中工作时遇到问题 我有两个模型 class Area models Model name CharField class Role models
  • django 保护用户上传的文件

    如何允许用户将文件上传到他们自己的用户指定的文件夹 并且只能看到他们已上传的文件 我正在使用 django 文件传输 目前 它让我可以选择将媒体放入哪个文件 但我可以将其放入任何用户的文件中并查看每个用户的媒体 这是我的 uploads m
  • django-allauth:重新排列表单字段(更改顺序)

    我正在尝试使用 django allauth 进行用户注册 我有这个表格 class UserProfileForm forms ModelForm class Meta model UserProfile fields gender co
  • 如何获取Django当前的语言?

    如何获取 Django 中的当前语言 特别感兴趣的功能是django utils translation get language 它返回当前线程中使用的语言 看文档 https docs djangoproject com en dev
  • 在 Django Rest Framework 中访问视图集和序列化器中的请求对象?

    我想访问 DRF 中 Views py 和 Serializers py 中的请求对象 我的观点 py class ProductViewSet viewsets ReadOnlyModelViewSet This viewset auto
  • Django South - 将 null=True 字段转换为 null=False 字段

    我的问题是 转变的最佳做法是什么null True场变成null False使用 Django South 的字段 具体来说 我正在与ForeignKey 你应该先写一个数据迁移 http south aeracode org docs t
  • Django modelForm 中的文件上传

    我正在尝试在 appengine django 中上传文档 使用纯 django 代码成功上传文档 使用 python manage py runsever 但是当我尝试使用 appengine 项目运行 django 时 它给了我错误 E
  • Django-celery/RabbitMQ 在哪里存储任务结果?

    我的 celery 数据库后端设置是 CELERY RESULT BACKEND database CELERY RESULT DBURI mysqlite db 我使用 RabbitMQ 作为我的消息发送器 似乎没有任何结果存储在数据库中

随机推荐