【问题标题】:How to access media files uploaded via a Django form?如何访问通过 Django 表单上传的媒体文件?
【发布时间】:2020-08-08 14:56:50
【问题描述】:

我在 Django 中以表单形式接受来自用户的图像。如何访问上传的图片以在网络浏览器中显示?

这就是我在 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 djangoHow 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) 的东西,那就太好了。

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

【问题讨论】:

    标签: python django


    【解决方案1】:

    如果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/images/'

    上面的问题是它会干扰所有其他媒体文件,因此更简单的解决方案是将/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})
    

    【讨论】:

    • 但我想该错误在modelff 行中。这就是我“尝试过的”。由于Hotel 模型明确指定upload_to=images/ 它应该上传到那里,实际上通过表单上传的图像在media/images/filename_different_from_original_one
    • 我也编辑了这个问题。请看一下
    • 你的 settings.py 中有 DEBUG = True 吗?
    • 是的,我有这个
    • 我真的不知道哪里出了问题。您确定您的数据库中没有返回错误 URL 的预先存在的数据。你也可以看看this 看看这是否有帮助。您是否也迁移了模型?
    猜你喜欢
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-21
    • 1970-01-01
    • 2016-05-30
    • 1970-01-01
    相关资源
    最近更新 更多