Python 如何在Django中将图像传递给模板?

Python 如何在Django中将图像传递给模板?,python,django,image,python-imaging-library,Python,Django,Image,Python Imaging Library,假设views.py中的相应函数如下所示 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 l

假设views.py中的相应函数如下所示

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\u img.html
模板中显示
base\u image

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

您应该处理图像,将其保存在本地磁盘上,然后向其发送路径或更像媒体url的路径,该路径将作为html模板的上下文与该图像相对应。您需要将django服务器配置为提供静态和媒体文件,并在生产环境中配置这些文件的服务。在这里阅读更多

但是,如果您不能或确实不想在本地保存动态图像,则可以创建动态图像,并在运行时使用PIL为django提供服务。这将是类似于在和你的代码,你应该添加

response = HttpResponse(mimetype="image/png")
base_image.save(response, "PNG")
return response
同时检查更多信息,它可能会工作,尽管我没有测试它。

settings.py

   'DIRS': [os.path.join(BASE_DIR, 'templates')], # add this line in TEMPLATES
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media/images')
    MEDIA_URL = '/media/images/'
添加存储manage.py的模板和媒体/图像目录

url.py

urlpatterns = [

                  url('polls/', views.get_img, name="polls"),


              ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
views.py

from django.conf import settings

def get_img(request):
    path = settings.MEDIA_ROOT
    img_list = os.listdir(path + "/")
    print(img_list[0])
    base_image = "http://127.0.0.1:8000/media/images/" + img_list[0]
    content = {"base_image": base_image}
    return render(request, 'get_img.html', content)
获取\u img.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>drop_down</title>
</head>
<body>

  {{base_image}}
  <img src="{{base_image}}" style="width: 20%; height: 20%;" alt="{{base_image}}">

</body>
</html>

放下
{{base_image}}

您不需要将图像传递到上下文。您只需要图像的路径就可以在模板中显示图像,谢谢您的回复。在实际的程序中,可能会有一些无法用html实现的图像编辑,即使用python图像库完成的事情。因此,仅从模板直接加载图像不是一个选项。我对问题进行了编辑,以表明这一点。“因此,直接从模板加载图像不是一个选项”--这是一个非序列。编辑图像并不意味着不能将其保存在某个位置并正常查看。通过将原始图像数据传递给模板,您会得到什么?谈论一些HTML不能做的事情……我很惊喜地发现,这个问题实际上有一个简单的解决方案。非常感谢您,Kamil。您可以使用dictionary content={“base\u image”:base\u image}将您的base\u image传递给get\u image.html页面,并使用get\u img.html模板中src属性处的{base\u image}键来显示。