2016-07-28 76 views
1

假设在views.py相应的功能看起来像如何将图像传递给Django中的模板?

from PIL import Image 
def get_img(request, img_source) 
    base_image = Image.open(os.getcwd() + '/deskprod/media/img/'+ img_source + ".png") 
    #Some editing of base_image done with PIL that prevents image from being directly loaded in html 
    return render_to_response('get_img.html', { 
     'base_image': base_image}, 
     context_instance=RequestContext(request)) 

我怎样才能然后显示在get_img.html模板base_image

+0

您不需要将图像传递到您的上下文。你只需要图像的路径来显示你的模板中的图像 –

+0

摩西,谢谢你的回应。在实际的程序中,会有一些无法在html中实现的图像编辑 - 即使用python图像库进行的操作。因此,直接从模板加载图像不是一种选择。我编辑了这个问题来表明这一点。 –

+0

“因此,直接从模板直接加载图像不是一个选项” - 这是一个不合适的选项。仅仅因为您编辑图像并不意味着您无法将其保存在某个地方并正常查看。无论如何,将原始图像数据传递给模板,您会获得什么?谈论一些HTML并不是要做的... –

回答

5

您应该处理图像,将其保存在本地磁盘上,然后发送一个或更多路径,就像将该图像作为上下文对应于html模板的媒体url一样。您需要配置您的django服务器来提供静态和媒体文件,并配置在生产环境中配置这些文件。在这里阅读更多https://docs.djangoproject.com/en/1.9/howto/static-files/

但是,如果你不能或者真的不想在本地保存它,它应该有可能创建动态图像,并与PIL一起在Django中使用。它会像你应该添加的代码一样。

response = HttpResponse(mimetype="image/png") 
base_image.save(response, "PNG") 
return response 

检查也更多信息http://effbot.org/zone/django-pil.htm,它可能工作,虽然我没有测试它。

+0

我很惊喜,实际上有一个简单的解决方案来解决这个问题。非常感谢卡米尔。 –

0

我认为您必须将图像(写入临时文件)保存到项目的静态目录中,并在模板中使用静态命令和图像文件名来显示它。

相关问题