【问题标题】:Django image upload succeeds with url written to DB but no image shows upload target folderDjango图像上传成功,将url写入数据库,但没有图像显示上传目标文件夹
【发布时间】:2015-08-18 15:59:27
【问题描述】:

我在 Django 中有表单

class BusinessForm(forms.Form):
    name = forms.CharField( required = True,
                             max_length=MAX_NAME_LENGTH,                                
                             widget=forms.TextInput(attrs={'placeholder': 'e.g Boston Market'}))        
    image = forms.ImageField()

属于这个型号的

class Business(models.Model):
    """ Describes Bussines data type """    
    name = models.CharField(max_length=BUS_NAME_LENGTH)         

    img = models.ImageField( upload_to = UPLOAD_TO )

在哪里UPLOAD_TO = 'business/images'

在 settings.py 中,我将媒体根定义如下

# Media Root - uploaded images
MEDIA_ROOT = '/uploads/'

在我通过表单上传后的数据库中,我看到了以下网址

但是在文件系统中我没有看到该文件,我在 localhost 的测试环境中运行。我使用的是 Windows 操作系统。

这是为什么呢?我是否必须为该文件夹设置一些权限?如果是这样,我如何确保在部署时这将在生产中工作?谢谢。

【问题讨论】:

    标签: python django windows file-upload django-uploads


    【解决方案1】:

    发生这种情况是因为 MEDIA_URLMEDIA_ROOT 配置不正确。将以下代码放入您的 settings.py 中

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

    注意

    如果您的设置文件中没有定义BASE_DIR,请将以下代码放在文件顶部:

    import os
    BASE_DIR = os.path.dirname(os.path.dirname(__file__))
    

    【讨论】:

    • 这预计会在部署时改变还是应该正常工作?您能否指出我们需要特别设置该行的文档os.path.join(BASE_DIR, "uploads")
    • 没关系,我在这里看到它docs.djangoproject.com/en/1.8/ref/models/fields,我错过了“完整路径”,他们有基于 linux 的示例
    • @SaherAhwal 这是否会在部署时发生变化...? 这取决于您计划保存上传文件的位置。如果您想将它们保存在后端服务器中,那么不。如果您想将它们保存在不同的(前端)服务器中,那么可以。
    • 谢谢 :)
    • 好答案。如果不指定媒体url,上传图片不会存储在指定文件夹中,即使调用服务器成功并且图片路径存储在db列中。
    猜你喜欢
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 2015-04-24
    • 1970-01-01
    • 2021-07-15
    • 2013-05-06
    相关资源
    最近更新 更多