[英]Why can't Django find my admin media files once I leave the built-in runserver?
当我使用内置的简单服务器时,一切正常,管理界面很漂亮:
python manage.py runserver
但是,当我尝试使用带有django.core.handlers.wsgi.WSGIHandler
的wsgi服务器来提供我的应用程序时,Django似乎忘记了管理媒体文件的位置,并且管理页面根本没有样式:
gunicorn_django
这怎么发生的?
当我查看Django的源代码时,我找到了原因。
在django.core.management.commands.runserver
模块的某处, WSGIHandler
对象被包装在AdminMediaHandler
。
根据该文件, AdminMediaHandler
是一个
WSGI中间件拦截对ADMIN媒体目录的调用,如ADMIN_MEDIA_PREFIX设置所定义,并为这些映像提供服务。 仅限本地使用,用于开发! 这尚未经过安全性测试,并且效率不高。
这就是为什么管理媒体文件只能在我使用测试服务器时自动找到的原因。
现在我继续手动设置管理媒体网址映射:)
Django默认不提供媒体文件,因为通常最好在另一台服务器上提供这些静态文件(性能等)。 因此,在部署应用程序时,您必须确保设置另一个服务于媒体的服务器(或虚拟服务器)(包括管理媒体)。 您可以在django/contrib/admin/media
找到django/contrib/admin/media
。 您应该设置MEDIA_URL和ADMIN_MEDIA_URL,以便它们指向媒体文件。 另见http://docs.djangoproject.com/en/dev/howto/static-files/#howto-static-files 。
我也遇到了这个问题(因为我对枪炮进行了一些开发),这里是如何删除管理媒体魔术并通过urls.py像任何其他媒体一样提供管理媒体:
import os
import django
...
admin_media_url = settings.ADMIN_MEDIA_PREFIX.lstrip('/') + '(?P<path>.*)$'
admin_media_path = os.path.join(django.__path__[0], 'contrib', 'admin', 'media')
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^' + admin_media_url , 'django.views.static.serve', {
'document_root': admin_media_path,
}, name='admin-media'),
...
)
另外: http : //djangosnippets.org/snippets/2547/
当然, #include <production_disclaimer.h>
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.