工作部分是这样的:
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中正常运行,应该解决什么问题?
答案 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)