可以上传Django媒体,无法检索 [英] Can upload Django media, can't retrieve

查看:119
本文介绍了可以上传Django媒体,无法检索的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

正如标题所述,由于我可以通过该网站将文件上传到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 /小猫/

世界上发生了什么?为什么嵌套媒体的url路径? django.conf.settings.MEDIA_ROOT 是空白的,而 mysite.settings.MEDIA_ROOT 不是?



urls.py



 从django.conf导入设置
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 /'

打印'Settings.py MEDIA_ROOT:%s'%(MEDIA_ROOT)



在磁盘上



  drwxr-xr-x 0 user user 0 3月11日11:00小猫/ 
-rwxr-xr-x 0用户用户22561 Oct 5 19:17 kittens / file.txt *



在浏览器中



 找不到页面(404)
要求t方法:GET
请求URL:http://192.168.../media/file.txt

file.txt不存在



python manage.py runserver



  11 / Mar / 2014 15:00:43]GET /media/file.txt HTTP / 1.1404 1629 



python manage.py shell



  IPython 1.1.0  - 增强的Interactive Python。 

在[1]中:从django.conf导入设置

在[2]:settings.MEDIA_ROOT
输出[2]:'小猫/'

在[3]中:settings.MEDIA_URL
输出[3]:'/ media /'

在[8]中:os.path.join(settings.MEDIA_ROOT ,'file.txt')
Out [8]:'kittens / file.txt'

在[9]中:os.path.exists(os.path.join(settings。 MEDIA_ROOT,'file.txt'))
Out [9]:True


解决方案

通过打印配置参数隔离问题,即:



settings.py



  MEDIA_URL ='/ media /'
MEDIA_ROOT ='/ home / user / kittens /'

打印'Settings.py MEDIA_ROOT:% s'%(MEDIA_ROOT)



urls.py



来自django.conf导入设置的$ $ $ $ $ $ $ $ $ $


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)
/ pre>

python manage.py runserver



  urls.py MEDIA_URL :/ media / 
urls.py MEDIA_ROOT:
Settings.py MEDIA_ROOT:/ home / user / kittens
验证模型...

您会注意到 urls.py MEDIA_ROOT 是空白。在检查 settings.py 之后,我注意到在配置了 MEDIA_ROOT 之前,正在调用根目录配置。因此,更改订单可以解决问题。



settings.py



 #必须首先指定MEDIA_ROOT,以便urls.py通过django.conf.settings选择它
MEDIA_ROOT ='/ home / user / kittens'
#然后调用站点root的urls.py
ROOT_URLCONF ='mysite.urls'

我不知道 嵌套的媒体路径,但是改变确实解决了它。也就是说,我可以导航到 http://192.168.xxx.xxx/media/file.txt


As the title states, I am lost here because I can upload files to MEDIA_ROOT via the site, but when I attempt to serve them I get a 404 error. The most annoying part is that this worked for ages, now something changed and it's broken.

UPDATE: I've narrowed the problem down.

If I change: MEDIA_URL = '/media/'

Django serves the file at http://192.168.xxx.xxx/media/media/file.txt

If I change: MEDIA_URL = '/kittens/'

Django serves the file at http://192.168.xxx.xxx/kittens/file.txt

runserver output:

urls.py MEDIA_URL: /media/
urls.py MEDIA_ROOT:
Settings.py MEDIA_ROOT: /home/user/kittens/

What in the world is going on? Why the "nested" media url path? django.conf.settings.MEDIA_ROOT is blank while mysite.settings.MEDIA_ROOT is not?

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)

On the disk

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*

In the browser

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

解决方案

The problem was isolated by printing the configuration parameters, i.e.:

settings.py

MEDIA_URL = '/media/'
MEDIA_ROOT = '/home/user/kittens/'

print 'Settings.py MEDIA_ROOT: %s' % (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)

python manage.py runserver

urls.py MEDIA_URL: /media/
urls.py MEDIA_ROOT:
Settings.py MEDIA_ROOT: /home/user/kittens
Validating models...

You'll notice the urls.py MEDIA_ROOT is blank. After inspecting settings.py I noticed that the root url configuration was being called before MEDIA_ROOT was configured. Therefore, changing the order fixed the problem.

settings.py

# Must specify MEDIA_ROOT first so urls.py picks it up via django.conf.settings
MEDIA_ROOT = '/home/user/kittens'
# Then call site root's urls.py
ROOT_URLCONF = 'mysite.urls'

I don't know how this caused the "nested" media path, but the change did fix it regardless. That is, I can navigate to http://192.168.xxx.xxx/media/file.txt.

这篇关于可以上传Django媒体,无法检索的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆