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

cld4siwp  于 2023-01-22  发布在  Go
关注(0)|答案(4)|浏览(164)

假设www.example.com中的对应函数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_img.html模板中显示base_image

kadbb459

kadbb4591#

你应该处理图像,将其保存在本地磁盘上,然后发送一个路径或类似于媒体url,它将对应于该图像作为上下文到html模板。你需要配置你的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,它可能会工作,虽然我没有测试它。

cczfrluj

cczfrluj2#

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/'

添加存储www.example.com的模板和媒体/图像目录manage.py。
urls.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)

get_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>
polkgigr

polkgigr3#

你可以将图像作为base64字节传递给Django模板,然后在html中使用它:

www.example.comview.py

from PIL import Image
from io import BytesIO
import base64
    
    
# Convert Image to Base64
def image_to_base64(image):
    buff = BytesIO()
    image.save(buff, format="PNG")
    img_str = base64.b64encode(buff.getvalue())
    img_str = img_str.decode("utf-8")  # convert to str and cut b'' chars
    return img_str

def home(request):
    image = Image.open('some_image.png')
    image64 = image_to_base64(image)
    return render(request, 'index.html', {'image64': image64})

索引. html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
  <img src="data:image/png;base64,{{image64}}">
</body>
</html>

它也适用于JPG-需要将所有PNG提及更改为. py/. html中的JPG

vhmi4jdf

vhmi4jdf4#

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

相关问题