为什么一旦我离开内置运行服务器,Django 就无法找到我的管理媒体文件?
当我使用内置的简单服务器时,一切正常,管理界面很漂亮:
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
当我查看Django的源代码时,我找到了原因。
在 django.core.management.commands.runserver 模块中的某个位置,有一个 WSGIHandler 对象
包装在
AdminMediaHandler
内。根据文档,
AdminMediaHandler
是一个这就是为什么管理媒体文件只能在我使用测试服务器时自动找到的原因。
现在我只需继续手动设置管理媒体 url 映射:)
When I look into the source code of Django, I find out the reason.
Somewhere in the
django.core.management.commands.runserver
module, aWSGIHandler
object iswrapped inside an
AdminMediaHandler
.According to the document,
AdminMediaHandler
is aAnd 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 :)
默认情况下,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.我也遇到了这个问题(因为我针对gunicorn进行了一些开发),以下是如何删除管理媒体魔法并通过urls.py像任何其他媒体一样提供管理媒体:
另外: 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:
Also: http://djangosnippets.org/snippets/2547/
And, of course,
#include <production_disclaimer.h>
.