文件已上传,但API中显示了错误的网址

时间:2019-04-19 09:46:46

标签: django django-rest-framework

工作部分是这样的:

file = models.FileField(upload_to=upload_file)

该方法定义为:

def upload_file(instance, filename):
   return '{user}/{filename}'.format(user=instance.user, filename=filename)

settings.py中,设置了以下路径:

STATIC_URL = '/static/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'static', 'media')
MEDIA_URL = '/media/'
(...)
# For reference:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

通过管理界面上传文件后,将显示一条成功消息,并且该文件显示在static/media/admin/<file>位置。 static目录位于BASE_DIR中,与上面摘录中提到的db.sqlite3位于同一级别。

但是,当在API中显示图像位置时,我得到了类似的信息:

"file": "http://127.0.0.1:8000/media/uploads/admin/<file>"

如您所见,static目录被跳过,单击链接后得到404。

要使其在Django 2.2中正常运行,应该解决什么问题?

1 个答案:

答案 0 :(得分:0)

解决方案是将以下代码添加到应用的urls.py文件中:

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

然后将该行添加到urlpatterns数组中:

urlpatterns = [
...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)