Django:使用请求将图像文件流式传输到模板中

时间:2019-01-10 11:05:33

标签: django python-3.x

使用请求,我正在从服务器获取图像。我试图将内容解析到视图(内联图像数据或其他方法)上,而不是写出该文件然后再使用该文件加载到模板中。

以下是r.contents的部分输出:

if

由于其字节,我尝试使用base64进行编码,然后传递到图像数据URL中,但无法渲染。下面是部分输出:

b'/x89PNG/r/n/x1v/n/x0e/x20/x20/rIHDR/x00/x00/x22/xdb/x00/x00/x01/xad/x08/x06/x00/x00/x00/xc7/xe3/xb8/xe9/x10/x00/x00/x06bKGD/x00/xff/x00/xcf/x00/

是否有办法使它正常工作?

下面是使用中的示例视图代码,该代码旨在让您对该问题有所了解:

<img id="now" style="max-width: 100%; width: auto;" alt="" src="data:image/png;base64,b&#39;iVBSDFSGcANSUhEUgAAAtsAAAGtCAYAAADH47jpAAAABmJLR0QA/wD/AP+gvSDFsfgsbfbvdsdsbdgndfnOy9eZwcV3nv/autt+mWRqPVY2ksCckWljXacAggexQvQK4NiXHEa1+JsbdfghgcEEOwlBwvHNIL8xvpFmwpIABl8I2HEYzJ4bY48AAzbyaEG2Lxfg463dR/Xpqaqufeuq6uf7+fSnu6vq1HOe012nTv3qqecABEEQBEfgdrcgbQBEEQBEEQBEEQBEEQBEEQfgdfgEEQBEEQAMA1

1 个答案:

答案 0 :(得分:0)

base64.b64encode()(我假设您正在使用)的输出为bytes。您需要先将其转换为字符串,然后再将其提交给模板进行渲染。

例如:

decoded = base64.b64encode(r.content).decode('ascii')  # Convert to a string first
context = {'imagedata': decoded}
return render(request, 'live_graph.html', context) 

然后在模板中:

<img id="now" style="max-width: 100%; width: auto;" alt="" src="data:image/png;base64,{{ imagedata }}"/>

这里的线索是示例base64图像数据中的初始b&#39;。这对应于b',当然您实际上并不需要base64编码的字符串本身。