为什么一旦我离开内置运行服务器,Django 就无法找到我的管理媒体文件?

发布于 2024-09-05 06:56:42 字数 268 浏览 3 评论 0原文

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

python manage.py runserver

但是,当我尝试使用带有 的 wsgi 服务器为我的应用程序提供服务时django.core.handlers.wsgi.WSGIHandler,Django 似乎忘记了管理媒体文件在哪里,并且管理页面根本没有样式:

gunicorn_django

这是怎么发生的?

When I was using the built-in simple server, everything is OK, the admin interface is beautiful:

python manage.py runserver

However, when I try to serve my application using a wsgi server with django.core.handlers.wsgi.WSGIHandler, Django seems to forget where the admin media files is, and the admin page is not styled at all:

gunicorn_django

How did this happen?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

ゃ懵逼小萝莉 2024-09-12 06:56:42

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

在 django.core.management.commands.runserver 模块中的某个位置,有一个 WSGIHandler 对象
包装在 AdminMediaHandler 内。

根据文档,AdminMediaHandler 是一个

拦截调用的WSGI中间件
到管理媒体目录,如
由 ADMIN_MEDIA_PREFIX 设置定义,并提供这些图像。
仅在本地使用此功能进行开发!这个还没有测试过
为了
安全性并且效率不是很高。

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

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

When I look into the source code of Django, I find out the reason.

Somewhere in the django.core.management.commands.runserver module, a WSGIHandler object is
wrapped inside an AdminMediaHandler.

According to the document, AdminMediaHandler is a

WSGI middleware that intercepts calls
to the admin media directory, as
defined by the ADMIN_MEDIA_PREFIX setting, and serves those images.
Use this ONLY LOCALLY, for development! This hasn't been tested
for
security and is not super efficient.

And that's why the admin media files can only be found automatically when I was using the test server.

Now I just go ahead and set up the admin media url mapping manually :)

无所的.畏惧 2024-09-12 06:56:42

默认情况下,Django 不提供媒体文件,因为通常最好在另一台服务器上提供这些静态文件(出于性能等考虑)。因此,在部署应用程序时,您必须确保设置另一个为媒体(包括管理媒体)提供服务的服务器(或虚拟服务器)。您可以在 django/contrib/admin/media 中找到管理媒体。您应该设置 MEDIA_URL 和 ADMIN_MEDIA_URL,以便它们指向媒体文件。另请参阅 http://docs.djangoproject.com /en/dev/howto/static-files/#howto-static-files

Django by default doesn't serve the media files since it usually is better to serve these static files on another server (for performance etc.). So, when deploying your application you have to make sure you setup another server (or virtual server) which serves the media (including the admin media). You can find the admin media in django/contrib/admin/media. You should setup your MEDIA_URL and ADMIN_MEDIA_URL so that they point to the media files. See also http://docs.djangoproject.com/en/dev/howto/static-files/#howto-static-files.

执笏见 2024-09-12 06:56:42

我也遇到了这个问题(因为我针对gunicorn进行了一些开发),以下是如何删除管理媒体魔法并通过urls.py像任何其他媒体一样提供管理媒体:

import os

import django

...

admin_media_url = settings.ADMIN_MEDIA_PREFIX.lstrip('/') + '(?P<path>.*)

另外: http://djangosnippets.org/snippets/2547/

当然,#include < /代码>。

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< /代码>。

I've run into this problem too (because I do some development against gunicorn), and here's how to remove the admin-media magic and serve admin media like any other media through urls.py:

import os

import django

...

admin_media_url = settings.ADMIN_MEDIA_PREFIX.lstrip('/') + '(?P<path>.*)

Also: http://djangosnippets.org/snippets/2547/

And, of course, #include <production_disclaimer.h>.

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'), ... )

Also: http://djangosnippets.org/snippets/2547/

And, of course, #include <production_disclaimer.h>.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文