代码之家  ›  专栏  ›  技术社区  ›  satoru

为什么Django在我离开内置runserver后找不到我的管理媒体文件?

  •  3
  • satoru  · 技术社区  · 15 年前

    当我使用内置简单服务器时,一切正常,管理界面很漂亮:

    python manage.py runserver

    但是,当我尝试使用带有 django.core.handlers.wsgi.WSGIHandler

    gunicorn_django

    这是怎么发生的?

    3 回复  |  直到 15 年前
        1
  •  2
  •   satoru    15 年前

    当我查看Django的源代码时,我找到了原因。

    django.core.management.commands.runserver WSGIHandler 包裹在一个 AdminMediaHandler .

    根据文件, AdminMediaHandler

    拦截调用的WSGI中间件 由ADMIN\u MEDIA\u PREFIX设置定义,并为这些图像提供服务。 仅在本地使用,用于开发!这个还没测试过 安全性和效率不是很高。

    这就是为什么管理媒体文件只能在我使用测试服务器时自动找到。

    现在我只需继续手动设置管理媒体url映射:)

        2
  •  1
  •   Stephen Fuhry Bobby    13 年前

    django/contrib/admin/media . 您应该设置媒体URL和管理媒体URL,以便它们指向媒体文件。另请参见 http://docs.djangoproject.com/en/dev/howto/static-files/#howto-static-files

        3
  •  0
  •   David Wolever    14 年前

    我也遇到过这个问题(因为我对gunicorn做了一些开发),下面介绍如何删除admin media magic,并通过url.py像其他任何媒体一样为admin media提供服务:

    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>