我创建了一个包含FileField的django rest模型。
media = models.FileField(upload_to='media/%Y/%m/%d/', null=True, blank=True)
我还实现了序列化器和ListCreateApiView。在那里,我可以上传文件。在POST请求休息服务器上传文件夹中的文件并返回我的URL。但是,在获取请求时,服务器返回带有url的json内容。如果我使用url获取请求,服务器将回复 Page Not Found 。如何使用django rest下载上传的文件?我是否必须为相同的视图创建单独的视图?如果是这样,怎么办?
修改
生成的网址是
http://localhost:8000/message/media/2015/12/06/aa_35EXQ7H.svg
答案 0 :(得分:4)
您必须在MEDIA_ROOT
中定义MEDIA_URL
,MEDIA_URL
并注册urlpatterns
,以允许Django服务器提供这些文件。
请按照以下步骤操作:
settings.py
档案:
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, "media_root")
将其附加到主urls.py
文件中以提供媒体文件:
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
# ... the rest of your URLconf goes here ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
此外,您不必在media
属性中再次添加upload_to
,因为它位于MEDIA_URL
的前面,然后网址将为/media/media/
。
这是一个正确的例子:
media = models.FileField(upload_to='message/%Y/%m/%d/', null=True, blank=True)
并且媒体的网址将是:
http://localhost:8000/media/message/2015/12/06/aa_35EXQ7H.svg