python - 如何访问通过 Django 表单上传的媒体文件?

我正在 Django 的表单中接受来自用户的图像。如何访问上传的图像以在 Web 浏览器中显示它?

这是我在 settings.py 中的内容

MEDIA_ROOT = os.path.join(BASE_DIR,'media')
MEDIA_URL = '/media/'

这是在我的 models.py 中

class Hotel(models.Model):
    name = models.CharField(max_length=50)
    image = models.ImageField(upload_to="images/")

此外,我添加了

if settings.DEBUG:
    urlpatterns +=static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)

在 urls.py 中

我试图访问图像

def image_view(request):
    if request.method=='POST':
        farm = hotelForm();
        form = hotelForm(request.POST,request.FILES)
        if form.is_valid():
            form.save()
            modelff = Hotel(name=request.POST['name'],image = request.FILES['image'])
            # print(modelff.image.url)

        return render(request,'djangoform.html',{"form":farm,"uploaded_data_url":modelff.image.url})

    else:
        form = hotelForm()
        return render(request,'djangoform.html',{"form":form})

在我的模板中,我访问图像为 <img src="{{uploaded_data_url}}"> .但是图像没有显示,控制台显示找不到图像。

附言我看过How to access media files in django How to access uploaded files in Django? https://docs.djangoproject.com/en/dev/howto/static-files/#serving-files-uploaded-by-a-user-during-development Django : accessing uploaded picture from ImageField 但他们似乎都没有帮助我。我找不到如何包含 'images/'在我的道路上。我的uploaded_data_url显示/media/Screenshot%202020-04-18%20at%206.39.24%20PM.png虽然我希望它显示 /media/images/Screenshot%202020-04-18%20at%206.39.24%20PM.png

问题出在哪里?

此外,如果可以有类似于 How can I get uploaded text file in view through Django? 的东西( f.read() in this question ) 会很棒。

编辑:从一个答案来看,问题似乎并不清楚,我想澄清一下,以上只是我尝试过的,我真的不知道它是否正确。其次,这样做的全部目的是从用户那里获取图像,对其进行处理,并将原始和最终图像显示给用户。因此,如果您必须使用任何其他方法来执行此操作,请分享。

最佳答案

如果 uploaded_data_url 显示此 /media/Screenshot%202020-04-18%20at%206.39.24%20PM.png 那么这意味着图像保存在 media 目录。这是预期的,因为您的 conf 是 MEDIA_URL = '/media/'

如果你想要它作为 /media/images/Screenshot%202020-04-18%20at%206.39.24%20PM.png 然后更改为这个 MEDIA_URL = '/media/图片/'.

上面的问题是它会干扰所有其他媒体文件,所以一个更简单的解决方案是将 /media/ 替换为 /media/images/.

在您的 views.py 中对此进行调整

url = str(modelff.image.url)
modUrl = url.replace("/media/","/media/images/")
return render(request,'djangoform.html',{"form":farm,"uploaded_data_url":modUrl l})

https://stackoverflow.com/questions/61418471/

相关文章:

python-3.x - 从 Python 中的多个文件夹读取多个 CSV 文件?

python - 是否可以使用自定义方法/属性覆盖外键关系

visual-studio-code - 在 vscode 的集成终端中运行命令后如何获取退出代码

python - Django ValueError : The view usermanager.

ios - 在 iPhone/iOS 的浏览器上录制视频 (MediaRecorder)

c# - udpclient 仅在本地接收广播(c#、Unity)

java - 节俭的Java : Cannot use reserved language keyw

c# - 使用 Razor 页面时在 ASP .NET 3.1 核心 Controller 中处理异

javascript - NextJs 获取下一页点击项的内容

javascript - Material-UI + Next js - TypeError : t