Django Admin 通过 apache 破坏了 CSS 链接,但在 runserver 模式下工作

Posted

技术标签:

【中文标题】Django Admin 通过 apache 破坏了 CSS 链接,但在 runserver 模式下工作【英文标题】:Django Admin has broken CSS link through apache, but works in runserver mode 【发布时间】:2011-05-22 08:07:18 【问题描述】:

出于某种原因,django 管理系统在某些时候崩溃了。缺少 css。

这是我的设置:

MEDIA_ROOT = os.path.normpath(os.path.join(SITE_ROOT, 'media/'))
MEDIA_URL = '/media/'
ADMIN_MEDIA_PREFIX = '/admin_media/'

但是,管理页面上生成的行仍然是:

<link rel="stylesheet" type="text/css" href="/admin_media/css/base.css" />

但是网站在这个文件上给了我 404。

而且它变得更好 - 如果我使用 apache 查看项目,就会出现这个问题。如果我使用python manage.py runserver,管理员工作得很好。

关于为什么会发生这种情况的任何线索? - 重新启动 apache,但没有帮助。

这是我在 urls 文件中的内容:

    (r'^media/(?P<path>.*)$', 'django.views.static.serve', 'document_root': settings.MEDIA_ROOT),

【问题讨论】:

您是通过 Django 提供静态媒体文件还是通过 Apache 提供静态媒体文件?如果是后者,您可能想展示如何在 Apache 配置下设置这些文件。 如果你告诉我如何理解答案,我会想办法告诉你 【参考方案1】:

好的,我想通了。

对于生产服务器,您必须设置指向您提供的设置的链接。对我来说,我在 settings.py 文件中选择了 admin_media 文件夹:

ADMIN_MEDIA_PREFIX = '/admin_media/'

为了告诉 apache 查找文件,您必须通过添加以下行来编辑启用站点的文件:

Alias /admin_media/ /usr/lib/python2.6/dist-packages/django/contrib/admin/media/

请注意,这是安装在我的服务器上的 django contrib admin 的路径。您的服务器可能有不同的安装,因此请查看您的设置。通过在终端中复制粘贴来找出你的 python 的安装位置:

python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"

祝大家好运!

【讨论】:

谢谢,这是一篇非常有用的帖子。我创建了一个从 ADMIN_MEDIA_PREFIX 到 [Python]/dist-packages/django/contrib/admin/media/ 的符号链接,这也有效,无需编辑 Apache 虚拟主机文件。 写得好。修复了我遇到的完全相同的问题。 值得一提的是,在 Django 1.4.2 上,路径是不同的。必须指向/usr/local/lib/python2.6/dist-packages/django/contrib/admin/static/admin/ 我的 Fedora 17 系统中 Django 1.4.3 的路径:/usr/lib/python2.7/site-packages/django/contrib/admin/static/admin/

以上是关于Django Admin 通过 apache 破坏了 CSS 链接,但在 runserver 模式下工作的主要内容,如果未能解决你的问题,请参考以下文章

Django Admin - 悬停时显示图像

django-debug-toolbar在获取sql统计信息时破坏管理员

django-admin 和django-admin.py的区别

django admin页面样式丢失问题

Python解决Django Admin管理界面样式表(CSS Style)丢失问题

通过 AWS Elastic Beanstalk 部署 Django 应用程序会破坏 CSS 路径