0

我有一个包含 ImageField 和 FileField 的表单

文件正在上传到正确的文件夹,但是当我尝试检索要在屏幕上显示的 url 时,它给了我一个不正确的位置

    fs_img = FileSystemStorage(location='media/images/')
    imageName = fs_img.save(image.name,image)
    uploaded_image_url = fs_img.url(imageName)

EG 图片上传为media/images/profile_image.jpg 但是,当我尝试检索刚刚保存的文件的 url 时,为了将位置保存到数据库,它会将其检索为不存在的media/profile_image.jpg

我知道 FileSystemStorage 使用的默认位置是MEDIA_ROOT,这似乎正是fs_img.url(imageName)使用的位置

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

另外,我发现在 models.py 文件中使用 upload_to 设置没有效果

image = models.ImageField(
    upload_to = 'media/images/',
    default='media/no_image.png'
)

如何让 fs_img.url(imageName) 返回正确的 URL,以便我可以将其保存到我的数据库中?

4

2 回答 2

1

我想我将其修复如下:

设置.py

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

FS_IMAGE_UPLOADS = os.path.join(MEDIA_ROOT,'images/')
FS_IMAGE_URL = os.path.join(MEDIA_URL,'images/')

FS_DOCUMENT_UPLOADS = os.path.join(MEDIA_ROOT,'documents/')
FS_DOCUMENT_URL = os.path.join(MEDIA_URL,'documents/')

视图.py

image = request.FILES['image']
document = request.FILES['document']
fs_img = FileSystemStorage(
        location = settings.FS_IMAGE_UPLOADS,
        base_url= settings.FS_IMAGE_URL
    )
imageName = fs_img.save(image.name,image)
uploaded_image_url = fs_img.url(imageName)

fs_doc = FileSystemStorage(
        location = settings.FS_DOCUMENT_UPLOADS,
        base_url=settings.FS_DOCUMENT_URL
    )
documentName = fs_doc.save(document.name, document)
uploaded_document_url = fs_doc.url(documentName)

upload_image_urlupload_document_url值现在可以正确返回

于 2018-02-01T17:32:05.723 回答
0

首先检查图像是否正在保存该媒体文件夹。如果它只保存提供图像的问题意味着您需要在Project Urls中添加这行代码

from django.conf.urls import url, include

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    url(r'^admin/', admin.site.urls),
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

因此,每当您尝试提供图像时,django 都会自动附加 url 并提供静态数据。如需进一步参考,请使用. 让我知道这个是否奏效

于 2018-01-31T06:37:16.357 回答