正如标题所述,我在这里迷失了,因为我可以通过站点将文件上传到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
处提供文件
runserver输出:
urls.py MEDIA_URL: /media/
urls.py MEDIA_ROOT:
Settings.py MEDIA_ROOT: /home/user/kittens/
到底是怎么回事?为什么是“嵌套”媒体url路径?django.conf.settings.MEDIA_ROOT
为空,而{
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
[11/Mar/2014 15:00:43] "GET /media/file.txt HTTP/1.1" 404 1629
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
根据djangodocumentation,媒体根必须是绝对路径:
因此,如果您希望媒体在项目中,您的配置应该如下所示:
或绝对路径:
^{pr2}$编辑: 既然你更新了你的问题,上面的答案就不相关了。但是我发现你的url配置有问题,你配置了两次媒体路径:
第二行就够了。。在
通过打印配置参数,即:
在设置.py在
在网址.py在
^{pr2}$Python管理.py运行服务器
您会注意到
urls.py
MEDIA_ROOT
是空白的。在检查了settings.py
之后,我注意到根url配置是在配置MEDIA_ROOT
之前调用的。因此,改变顺序解决了这个问题。在在设置.py在
我不知道这是如何导致“嵌套”媒体路径的,但是不管怎样,这个改变确实修复了它。也就是说,我可以导航到
http://192.168.xxx.xxx/media/file.txt
。在相关问题 更多 >
编程相关推荐