我有一个包含ImageField和FileField
的表单文件正在上传到正确的文件夹,但是当我尝试检索要在屏幕上显示的网址时,它会给我一个错误的位置
fs_img = FileSystemStorage(location='media/images/')
imageName = fs_img.save(image.name,image)
uploaded_image_url = fs_img.url(imageName)
E.G。图片上传为
我知道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')
另外,我发现在使用upload_to设置的models.py文件中没有效果
image = models.ImageField(
upload_to = 'media/images/',
default='media/no_image.png'
)
如何让fs_img.url(imageName)返回正确的URL,以便将其保存到我的数据库?
答案 0 :(得分:1)
我想我修正了如下:
<强> settings.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/')
<强> views.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)
uploaded_image_url 和 uploaded_document_url 值现在正确返回
答案 1 :(得分:0)
首先检查图像是否正在保存该媒体文件夹。如果仅保存提供图像的问题,则意味着您需要在项目网址
中添加此行代码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都会自动附加网址并提供静态数据。有关进一步参考,请使用this。如果有效,请告诉我