【发布时间】:2014-04-15 07:10:06
【问题描述】:
正如标题所述,我在这里迷路了,因为我可以通过该站点将文件上传到 MEDIA_ROOT,但是当我尝试为它们提供服务时,我收到 404 错误。最烦人的部分是这工作了很长时间,现在发生了一些变化并且坏了。
更新:我已经缩小了问题范围。
如果我改变:
MEDIA_URL = '/media/'
Django 在http://192.168.xxx.xxx/media/media/file.txt 提供文件
如果我改变:
MEDIA_URL = '/kittens/'
Django 在http://192.168.xxx.xxx/kittens/file.txt 提供文件
运行服务器输出:
urls.py MEDIA_URL: /media/
urls.py MEDIA_ROOT:
Settings.py MEDIA_ROOT: /home/user/kittens/
世界上到底发生了什么?为什么是“嵌套”媒体 url 路径? django.conf.settings.MEDIA_ROOT 是空白而mysite.settings.MEDIA_ROOT 不是?
urls.py
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = patterns('',
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
print 'urls.py MEDIA_URL: %s' % (settings.MEDIA_URL)
print 'urls.py MEDIA_ROOT: %s' % (settings.MEDIA_ROOT)
settings.py
MEDIA_URL = '/media/'
MEDIA_ROOT = '/home/user/kittens/'
print 'Settings.py MEDIA_ROOT: %s' % (MEDIA_ROOT)
在磁盘上
drwxr-xr-x 0 user user 0 Mar 11 11:00 kittens/
-rwxr-xr-x 0 user user 22561 Oct 5 19:17 kittens/file.txt*
在浏览器中
Page not found (404)
Request Method: GET
Request URL: http://192.168.../media/file.txt
"file.txt" does not exist
python manage.py runserver
[11/Mar/2014 15:00:43] "GET /media/file.txt HTTP/1.1" 404 1629
python manage.py shell
IPython 1.1.0 -- An enhanced Interactive Python.
In [1]: from django.conf import settings
In [2]: settings.MEDIA_ROOT
Out[2]: 'kittens/'
In [3]: settings.MEDIA_URL
Out[3]: '/media/'
In [8]: os.path.join(settings.MEDIA_ROOT, 'file.txt')
Out[8]: 'kittens/file.txt'
In [9]: os.path.exists(os.path.join(settings.MEDIA_ROOT, 'file.txt'))
Out[9]: True
【问题讨论】:
-
为什么file.txt是可执行文件?您是否在删除该属性后尝试过?
-
这是一个挂载的 NTFS 共享,所以 perms 就这样卡住了。但是,这不是问题,1)从一开始就是配置(当它工作时),2)为了验证我使用 perms
rw将媒体路径移动到本地文件系统,它仍然无法提供文件。 -
MEDIA_ROOT在我的盒子里是绝对的。我会更新问题以反映这一点。