在开发过程中本地托管管理媒体

时间:2009-12-04 02:53:13

标签: django

考虑以下设置:

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,它可以替代管理模板/媒体。

3 个答案:

答案 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,它可以解决问题。