我已成功为普通的MEDIA文件提供媒体文件,但当我尝试提供管理媒体文件时,我失败了。请帮助我找到问题所在,因为我已经尝试解决问题几个小时已经没有运气了(谷歌也一直在阅读django doc关于提供静态文件)。
我尝试访问localhost:8000 / media / a.gif时的错误如下:
找不到页面: F:\ python25 \ lib中\站点包\ django的/了contrib /管理/媒体\ A.GIF
我将管理媒体文件放在名为“media”的目录中,而我将普通媒体文件放在名为“static”的目录中。我也在Windows上。
以下是我在urls.py中提供普通媒体文件的方式:
# serve static files
from django.conf import settings
if settings.ENVIRONMENT==settings.ENV_DEVELOPMENT:
urlpatterns += patterns("django.views",
url(r"%s(?P<path>.*)$" % settings.MEDIA_URL[1:], "static.serve", {"document_root": settings.MEDIA_ROOT,})
)
我的settings.py(只有重要部分):
import project_path
MEDIA_ROOT = project_path.MEDIA.replace('\\','/')
MEDIA_URL = '/static/'
ADMIN_MEDIA_PREFIX = '/media/'
TEMPLATE_DIRS = (
project_path.TEMPLATE.replace('\\','/'),
)
我的project_path.py:
import sys
from os.path import dirname, join
ROOT = dirname(__file__)
APP = join(ROOT, "apps")
TEMPLATE = join(ROOT, "templates")
MEDIA = join(ROOT, "static")
ADMIN_MEDIA = join(ROOT, "media")
任何提示?
或者至少请分享您如何提供管理媒体文件(不更改来自Web服务器的任何文件,但只能通过django源代码)
提前致谢:)
答案 0 :(得分:32)
您的答案是,除非ADMIN_MEDIA_PREFIX
明确设置域名
runserver命令将提供contrib.admin的管理媒体文件。
我也被这种魔法行为所灼伤。有一张这样的票(Ticket #8336),但设计决定是留下方便和混乱。
因此,要使用runserver
命令从您的目录中提供管理媒体(使用grappelli或任何您想要使用的管理皮肤),您必须使用以下内容:
MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'media/')
ADMIN_MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'admin-media/')
MEDIA_URL = '/site-media/'
ADMIN_MEDIA_PREFIX = 'http:/localhost:8000/admin-media/'
我希望我在这里复活正确的问题。提前道歉。
答案 1 :(得分:3)
建议运行dev服务器稍微不同[1] python manage.py runserver mydomain.com:8000 --adminmedia = / path / to / your / admin / media /
[1] http://code.google.com/p/django-grappelli/wiki/Installation
答案 2 :(得分:2)
尝试
(r'^ admin_media /(.*)','django.views.static.serve',{'document_root':'django / contrib / admin / media /','show_indexes':True}),< / p> 在您的urls.py文件中
。并改变你的
ADMIN_MEDIA_PREFIX = '/admin_media/'
答案 3 :(得分:2)
我刚刚在我的测试网站修复了一个类似的错误。 ADMIN_MEDIA_PREFIX和MEDIA_URL永远不应相同,请参阅docs中的以下注释:
确保使用尾部斜杠,并且 这有不同于 MEDIA_URL设置(因为相同的URL 无法映射到两个不同的 文件集。)
答案 4 :(得分:1)
尝试更改:
ADMIN_MEDIA_PREFIX = '/static/media/'
这假设您的MEDIA_ROOT / media /目录包含管理媒体文件夹(这是我从您的问题中理解的)。
答案 5 :(得分:1)
由于staticfiles包含在trunk中(我相信大约1.3),因此不再使用ADMIN_MEDIA_PREFIX魔法。
如今,runserver假设你的STATIC_URL +'admin /'。它秘密而默默地拦截你的请求,忽略你所有的urlconf,并试图让你发疯。
答案 6 :(得分:0)
尝试使用STATICFILES_DIRS作为打击
# Additional locations of static files
STATICFILES_DIRS = (
# Put strings here, like "/home/html/static" or "C:/www/django/static".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
("images", os.path.join(STATIC_ROOT,'images').replace('\\','/')),
("css", os.path.join(STATIC_ROOT,'css').replace('\\','/')),
("js", os.path.join(STATIC_ROOT,'js').replace('\\','/')),
)
祝你好运!