如何使用 jquery 在 Django 中提供图像
How to serve an image in Django using jquery
我正在尝试使用从 Django 服务器返回的 png 图像更新我的 html 页面中的 div
元素。
在我发送 ajax POST 按钮点击请求的客户端脚本中,我有 -
$('#mybtn').click(function (event) {
event.preventDefault();
$.ajax({
url: "/analysis",
type: "POST",
data: { 'data': $("#analysis_list").val(), csrfmiddlewaretoken: document.getElementsByName('csrfmiddlewaretoken')[0].value },
success: function (response) {
$('#imagediv').html('<img src=' + response + ' />');
},
});
});
在我的 views.py 中,我有 -
def analysis(request):
dataFromClient = dict(request.POST)['data'][0]
pathToImg = testAnalytics(dataFromClient)
img = Image.open(pathToImg)
response = HttpResponse(content_type="image/png")
img.save(response, "PNG")
return response
其中testAnalytics
方法根据客户端发送的数据和returns路径生成要显示的图片。 Image
是从 PIL
.
导入的
我在客户端渲染图像时遇到问题 javascript。当我将 response
分配给 <img>
标签的 src
属性时,我在浏览器上看到的是原始图像数据而不是图像(如此处讨论 - How to update a div with an image in Django?)。我不确定我哪里出错了。
我也尝试过如下对响应进行base64编码(但不确定我是否正确实现)-
success: function (response) {
$('#imagediv').html('<img alt="Embedded Image" src="data:image/png;base64,' + response + '" />');
}
到目前为止,我已经参考了以下链接 -
Django: How to render image with a template
Serve a dynamically generated image with Django
我对网络编程和 Django 都还很陌生。关于这个问题的任何见解都会非常有帮助。提前致谢。
如果您想通过任何 HTML 标签的内容设置图像,您必须在图像内容之前应用 data:{type};{encode-format}
并在 CSS 中设置 background
url,类似如下:
html-element{
background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAEklEQVQImWNgIAD+QzFuAeIAAPVzA/0vfQ+9AAAAAElFTkSuQmCC) repeat;
}
或通过 img
标签的 src
属性设置:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAEklEQVQImWNgIAD+QzFuAeIAAPVzA/0vfQ+9AAAAAElFTkSuQmCC">
例如,如果您在 www.patternify.com 站点中生成一个新模式,您可以从 Base64 代码 字段中复制和使用 base64 内容。
在发送之前尝试使用 base64 对图像进行编码。
import base64
#rest of your code
with open("pathToImage.png", "rb") as image_file:
encoded_string = base64.b64encode(image_file.read())
然后
success: function(response){
$('#imagediv').html('<img src="data:image/png;base64,' + response + '" />');
我正在尝试使用从 Django 服务器返回的 png 图像更新我的 html 页面中的 div
元素。
在我发送 ajax POST 按钮点击请求的客户端脚本中,我有 -
$('#mybtn').click(function (event) {
event.preventDefault();
$.ajax({
url: "/analysis",
type: "POST",
data: { 'data': $("#analysis_list").val(), csrfmiddlewaretoken: document.getElementsByName('csrfmiddlewaretoken')[0].value },
success: function (response) {
$('#imagediv').html('<img src=' + response + ' />');
},
});
});
在我的 views.py 中,我有 -
def analysis(request):
dataFromClient = dict(request.POST)['data'][0]
pathToImg = testAnalytics(dataFromClient)
img = Image.open(pathToImg)
response = HttpResponse(content_type="image/png")
img.save(response, "PNG")
return response
其中testAnalytics
方法根据客户端发送的数据和returns路径生成要显示的图片。 Image
是从 PIL
.
我在客户端渲染图像时遇到问题 javascript。当我将 response
分配给 <img>
标签的 src
属性时,我在浏览器上看到的是原始图像数据而不是图像(如此处讨论 - How to update a div with an image in Django?)。我不确定我哪里出错了。
我也尝试过如下对响应进行base64编码(但不确定我是否正确实现)-
success: function (response) {
$('#imagediv').html('<img alt="Embedded Image" src="data:image/png;base64,' + response + '" />');
}
到目前为止,我已经参考了以下链接 -
Django: How to render image with a template
Serve a dynamically generated image with Django
我对网络编程和 Django 都还很陌生。关于这个问题的任何见解都会非常有帮助。提前致谢。
如果您想通过任何 HTML 标签的内容设置图像,您必须在图像内容之前应用 data:{type};{encode-format}
并在 CSS 中设置 background
url,类似如下:
html-element{
background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAEklEQVQImWNgIAD+QzFuAeIAAPVzA/0vfQ+9AAAAAElFTkSuQmCC) repeat;
}
或通过 img
标签的 src
属性设置:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAEklEQVQImWNgIAD+QzFuAeIAAPVzA/0vfQ+9AAAAAElFTkSuQmCC">
例如,如果您在 www.patternify.com 站点中生成一个新模式,您可以从 Base64 代码 字段中复制和使用 base64 内容。
在发送之前尝试使用 base64 对图像进行编码。
import base64
#rest of your code
with open("pathToImage.png", "rb") as image_file:
encoded_string = base64.b64encode(image_file.read())
然后
success: function(response){
$('#imagediv').html('<img src="data:image/png;base64,' + response + '" />');