考虑以下设置:
urls.py
if not settings.PRODUCTION:
urlpatterns += patterns('',
(r'^admin-media/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.LOCAL_ADMIN_MEDIA_ROOT, 'show_indexes': True}),
(r'^media/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.LOCAL_MEDIA_ROOT, 'show_indexes': True}),
)
settings.py
if not PRODUCTION:
ADMIN_MEDIA_PREFIX = '/admin-media/'
因此,当在本地开发服务器上运行时,应该通过runserver提供媒体文件,对吧?找到媒体路由,但是每个请求都会返回“权限被拒绝”(但只有一个管理媒体,常规媒体正常工作)。
所以我做了一些检查。事实证明,如果ADMIN_MEDIA_PREFIX
设置为与路线相同的值...
(r'^admin-media/(?P<path>.*)$', 'django.views.static.serve', ... ),
ADMIN_MEDIA_PREFIX = '/admin-media/'
...然后runserver将始终返回“权限被拒绝。”
但是,如果ADMIN_MEDIA_PREFIX
与路线名称不同......
(r'^admin-media/(?P<path>.*)$', 'django.views.static.serve', ... ),
ADMIN_MEDIA_PREFIX = '/non-sense-prefix/'
...然后将提供文件(尽管我必须手动浏览才能看到它们,因为所有媒体链接都被http://localhost:8000/non-sense-prefix/whatever.jpg打破)。
这里的交易是什么?
与此同时,我通过一点点破解来改变目录......
(r'^admin-media/(?P<path>.*)$', 'django.views.static.serve', ... ),
ADMIN_MEDIA_PREFIX = '/admin-media/../admin-media/'
...但我真的很乐意配置它。似乎django试图变得聪明并代表我做点什么,但在这个过程中弄乱了。有什么想法吗?
编辑 - 我正在手动为管理媒体提供服务,因为我正在使用grappelli,它可以替代管理模板/媒体。
答案 0 :(得分:1)
如果您正在运行Grappelli,则可以在使用runserver
时通过指定命令行参数--adminmedia
来设置管理媒体。这是一个例子:
python manage.py runserver --adminmedia=/path/to/grappelli/media
其中/path/to/grappelli/media
是Grappelli安装的media
目录的完整路径。
答案 1 :(得分:0)
使用开发服务器时,您无需专门为管理媒体提供服务 - 这应该会自动发生。
答案 2 :(得分:0)
我认为将本地系统中的符号链接与django管理媒体(与您在制作中使用的目录相同的目录)中的符号链接比在设置中受到大量生产的情况更简单。
< / LI>正如丹尼尔正确指出的那样,django默认为管理媒体提供服务。不再需要配置。所以问题可能是不同的。在模板目录中尝试chmod 777
,它可以解决问题。