我可以通过Django admin在我的某个模型中成功保存文件,但无法打开文件。这是我的模特:
class Answer (models.Model):
answer = models.CharField(max_length=1000)
attach_file = models.FileField(upload_to='Attachments', blank=True)
我没有触及设置文件,根据我的理解,它应该使用默认值:
MEDIA_ROOT = ''
MEDIA_URL = ''
STATIC_ROOT = ''
我在admin.py中注册了模型,我能够浏览文件并保存。当试图打开该文件时,我得到:
Page not found (404)
Request Method: GET
Request URL: http://127.0.0.1:8000/admin/businessui/answer/1/Attachments/outlook.png/
answer object with primary key u'1/Attachments/outlook.png' does not exist.
有人可以指出我在这里缺少的是能够在我的开发机器上本地打开保存的文件吗?
答案 0 :(得分:5)
尝试像这样设置settings.py:
import os
PROJECT_ROOT_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir))
MEDIA_ROOT = os.path.join(PROJECT_ROOT_PATH, 'media/')
MEDIA_URL = '/media/'
因此,请尝试将您的文件放入:
http://127.0.0.1:8000/media/Attachments/outlook.png
答案 1 :(得分:2)
参考@ Sawwy对@ RicardoCarmo回答的评论。我发布作为格式化的答案。
这是我在主网址中使用的内容:
if getattr(settings, 'DEBUG', False) or getattr(settings, 'DEBUG_MEDIA', False):
media_url = getattr(settings, 'MEDIA_URL', '/media/').lstrip('/')
urlpatterns = patterns('',
url(r'^%s(?P<path>.*)$' % (media_url,), 'django.views.static.serve', {
'document_root': settings.MEDIA_ROOT
}),
) + urlpatterns
请注意,在生产环境中,您的媒体文件应由Web服务器提供,并且这些请求不应该到达Django。这就是为什么它符合if DEBUG or DEBUG_MEDIA
。