如何在 django 中提供图像而不在 django 中使用 <img> 标签?

Posted

技术标签:

【中文标题】如何在 django 中提供图像而不在 django 中使用 <img> 标签?【英文标题】:How to serve an image in django without using <img> tag in django? 【发布时间】:2019-12-29 09:43:43 【问题描述】:

最近我开始学习 Django,一开始实际上我想准备一个 API 来提供图像。 为此,当任何人请求访问图像时,我的程序应从本地库中读取原始图像数据并提供服务,并为请求该图像的任何人准备对该图像的访问。

请注意,我不想在我的 html 文件中显示带有标签的图像。只需准备访问原始数据以操作该图像或任何类似的东西。

【问题讨论】:

你的问题有点不清楚。我完全不确定“只是准备访问原始数据以操作该图像或类似的东西”。实际上的意思。您能否提供一个您想要的示例? @urbanespaceman 你是对的,也许我的问题有点不清楚。假设我们有一个本地目录,我想编写一个程序来提供这些图像,所以每个人都可以请求一个特定的图像,作为响应,我的程序给它该图像的原始数据,以便他(或她)可以显示, 编辑, 操纵或 ... 就可以了。 这些原始数据将以什么格式提供?它是一个photogtaph .RAW文件吗?还有什么?请具体。 @urbanespaceman 这只是一个简单的 jpeg 格式文件。我想准备一个 API 来访问这个图像,以便在显示之前更改每个图像的原始数据。 我认为你应该能够将文件作为二进制文件读取,如果这就是你所需要的。或者看看使用pillow 可能吗? 【参考方案1】:

您需要编写一个视图,以 'rb' 模式打开图像并读取它,并通过 HttpResponse 以文本或 text/html 模式返回图像。

注意:您返回的图像路径不能是远程路径,它必须是服务器内部的文件,可以通过您的 views.py 文件访问。

在这种情况下,您需要通过 HttpResponse(来自 django.http)返回响应,并且不能使用 render() 返回响应。

import os
from django.conf import settings
from django.http import HttpResponse

def test(request):
    with open(os.path.join(settings.BASE_DIR, 'static', 'delete.jpg'), rb) as f:
        image_data = f.read()
    return HttpResponse(image_data, content_type="text")

【讨论】:

注明@SamuelPhilipp。

以上是关于如何在 django 中提供图像而不在 django 中使用 <img> 标签?的主要内容,如果未能解决你的问题,请参考以下文章

模板不显示图像 - django

如何在 p5.js 中裁剪图像而不在屏幕上绘制图像

ImageField() 不在 ModelForm 中保存图像 - Django/Python

为啥 Django 不在我的模板上显示我的动态背景图像

如何让 Django 填充一个 html 模板,然后让用户下载它而不在浏览器中显示它?

如何使用 jquery 在 Django 中提供图像