【发布时间】:2012-06-15 18:47:07
【问题描述】:
由于an evergreen issue,我被卡住了,没有提供静态文件。相反,放在MEDIA_ROOT 子树中的文件会在MEDIA_URL 下正确提供。
剥离settings.py:
DEBUG = True
STATIC_URL = '/static/'
STATIC_ROOT = '/home/foo/devel/static'
MEDIA_URL = '/media/'
MEDIA_ROOT = '/home/foo/devel/media'
# the following is deprecated but is it seems grappelly requires it
ADMIN_MEDIA_PREFIX = STATIC_URL + "grappelli/"
STATIC_FILES = ()
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
创建我所做的项目:
$ cd /home/foo/devel/
$ virtualenv testdrive
$ . bin/activate; pip install django; cd testdrive
$ django-admin.py fbtest
并得到这个目录树(剥离):
. <-- /home/foo/devel/
├── bin
├── fbtest
│ └── fbtest
│ ├── media
│ │ └── foo.jpg
│ ├── static
│ └────── foo.jpg
├── include
└── lib
STATIC_URL 下的文件应该由 Django 静态文件自动提供(在我的情况下不是),而其他文件必须手动处理。所以我将这些行附加到urls.py:
import settings
if settings.DEBUG:
urlpatterns += patterns('',
url(r'^%s(?P<path>.*)$' % settings.MEDIA_URL.lstrip("/"),
'django.views.static.serve', {
'document_root': settings.MEDIA_ROOT,
}),
)
访问http://host/media/filebrowser/foo.jpg 有效,而http://host/static/foo.jpg 给出错误404。为什么?
【问题讨论】:
-
你用的是什么版本的django?
-
你能把
INSTALLED_APPS添加到剥离的settings.py文件中吗? -
你能解释一下这里的“常青树”是什么意思吗?谷歌没用。
-
@JordanReiter 感谢您的指点,问题确实存在。 See my answer.
-
对不起。我的意思是一个经常讨论的经典问题。
标签: django static-files django-staticfiles