【问题标题】:Django Admin Page missing CSSDjango 管理页面缺少 CSS
【发布时间】:2011-07-29 01:54:35
【问题描述】:

我看到了这个 question 和来自 Django 项目的推荐 here 但仍然无法让它工作。我的 Django 管理页面根本不显示 CSS。

这是我目前的配置。

settings.py

ADMIN_MEDIA_PREFIX = '/media/admin/'

httpd.conf

<VirtualHost *:80>
    DocumentRoot /home/django/sgel
    ServerName ec2-***-**-***-***.ap-**********-1.compute.amazonaws.com
    ErrorLog /home/django/sgel/logs/apache_error.log
    CustomLog /home/django/sgel/logs/apache_access.log combined
    WSGIScriptAlias / /home/django/sgel/apache/django.wsgi

    <Directory /home/django/sgel/media>
        Order deny,allow
        Allow from all
    </Directory>

    <Directory /home/django/sgel/apache>
        Order deny,allow
        Allow from all
    </Directory>

    LogLevel warn

    Alias /media/ /home/django/sgel/media/

</VirtualHost>

<VirtualHost *:80>
   ServerName sgel.com
   Redirect permanent / http://www.sgel.com/
</VirtualHost>

此外,我还运行以下命令来创建(我认为)符号链接 ln -s /home/djangotest/sgel/media/admin/ /usr/lib/python2.6/site-packages/django/contrib/admin/media/

更新

在我的 httpd.conf 文件中,

User django
Group django

当我在 /media 目录中运行 ls -l 时

drwxr-xr-x 2 root root 4096 Apr  4 11:03 admin
-rw-r--r-- 1 root root    9 Apr  8 09:02 test.txt

root 用户应该是 django 吗?

更新 2 当我在/media/admin 文件夹中输入ls -la

total 12
drwxr-xr-x 2 root root 4096 Apr 13 03:33 .
drwxr-xr-x 3 root root 4096 Apr  8 09:02 ..
lrwxrwxrwx 1 root root   60 Apr 13 03:33 media -> /usr/lib/python2.6/site-packages/django/contrib/admin/media/

问题是,当我导航到 /usr/lib/python2.6/site-packages/django/contrib/admin/media/ 时,文件夹是空的。所以我将我的 Django 安装中的 CSS、IMG 和 JS 文件夹复制到 /usr/lib/python2.6/site-packages/django/contrib/admin/media/ 中,但它仍然不起作用

【问题讨论】:

  • 回答您关于/media 下子目录所有权的问题:不,文件权限不会限制其他用户对这些文件的读取权限(请参阅组和其他人的 rx 位访问),所以文件权限不是问题。
  • @photoionized 啊,谢谢。仍然在 linux 中弄湿我的脚!
  • 进入 /media/admin/css/base.css 时出现的错误页面是什么?
  • 当我转到http://www.sgel.com/media/admin/css/base.css 时,我得到Oops this link appears to be broken
  • 看起来符号链接仍未正确设置。您是否有可能在最初尝试创建符号链接时弄乱了位置 /usr/lib/python2.6/site-packages/django/contrib/admin/media/

标签: python css django django-admin


【解决方案1】:

除了按照 Daniel Roseman 的建议更正符号链接之外,您还需要确保运行 Apache 的用户对管理媒体具有读取权限。

  • 如果您在媒体目录中输入ls -l,您会看到符号链接吗?
  • 如果您从您的媒体目录中cd admin,它可以工作吗?如果你然后运行ls,你能看到管理媒体吗?
  • 运行 Apache 的用户是否具有对管理媒体的读取权限?

如果所有这些都有效,那么请使用您当前的配置和这些命令的结果更新您的问题,我们会再看一看。

更新响应:好的,权限看起来没问题。看起来您的媒体目录中的目录结构有点错误。

/usr/lib/python2.6/site-packages/django/contrib/admin/media/ 是空的这一事实也令人不安。解决眼前的问题后,您可能需要考虑在预期的位置重新安装 django。

不管怎样,结构应该是这样的:

$ cd media
$ ls -la
drwxr-xr-x 2 root root 4096 Apr 13 03:33 .
drwxr-xr-x 3 root root 4096 Apr  8 09:02 ..
lrwxrwxrwx 1 root root   60 Apr 13 03:33 admin -> /usr/lib/python2.6/site-packages/django/contrib/admin/media/
-rw-r--r-- 1 root root    9 Apr  8 09:02 test.txt

也就是说,在media/ 目录中,它们应该是一个名为admin 的链接,直接指向您安装的django 的/admin/media 目录。

要修复你所拥有的,在 media/admin/ 目录中运行:

rm media
cd ..
rmdir admin

然后按照 Daniel Roseman 的回答中的建议重新创建符号链接。

【讨论】:

  • @nai 从您的更新中看起来您的管理文件夹是 media/admin/media 但您的 settings.py 文件显示 ADMIN_MEDIA_PREFIX = '/media/admin/'。如果您遵循肖恩所说的,它将起作用。否则将您的 settings.py 更改为 ADMIN_MEDIA_PREFIX = '/media/admin/media/'
  • @James @Sean Wallace - 我想我终于明白现在发生了什么。我认为发生的事情是我以某种方式在我的/media/admin 中创建了一个媒体文件夹,这导致在/media/admin/media 中创建了与ADMIN_MEDIA_PREFIX 设置不匹配的符号链接。毕竟,这实际上是一个非常直接的问题。感谢您的帮助,尤其是。你的评论詹姆斯。它让一切都在我的理解中点击。
  • 奇怪,我在赏金结束前接受了你的回答。我不知道你为什么只收到了一半。
  • 很高兴你把它整理好了!不用担心赏金。
【解决方案2】:

这里有几个问题,都与您的符号链接有关。

首先,源和目标需要相反(我自己总是弄错)。

其次,您使用的路径与您在 Apache conf 中指定的路径完全不同 - djangotest/sgelectionsdjango/sgel

这样做:

cd /home/django/sgel/media/
ln -s /usr/lib/python2.6/site-packages/django/contrib/admin/media/ admin

【讨论】:

  • 我的错,请输入我的部分。我尝试了新的符号链接,但它仍然不起作用。
  • @ampersandre 是的,我收回我说的话。在我的评论中是短视的。
【解决方案3】:

简单的解决方案是在 wsgi.py 文件中更改一行

    from django.core.wsgi import get_wsgi_application
    application = get_wsgi_application()

变成

    from django.core.wsgi import get_wsgi_application
    from dj_static import Cling

    application = Cling(get_wsgi_application())

正确显示管理 CSS 的最简单方法。干杯

【讨论】:

  • 非常简洁的快速解决方案。为我工作(在 Ubuntu 14.10 @ DigitalOcean 上运行的 Python 3.4、Django 1.8)。
【解决方案4】:

我刚刚找到的另一种方法,它看起来像是一个正确支持的方法。

确保您的设置中有静态文件模块。还要配置 STATIC_ROOT 选项。

https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#module-django.contrib.staticfiles

创建您的 /static/ 文件夹并设置权限。

使用 /static/ 别名配置 apache。

alias /static <path to project root>/static/
<Directory "<path to project root>/static/">
    Order deny,allow
    Allow from all
</Directory>

然后从你的项目文件夹运行

sudo python manage.py collectstatic [-n to do a dry run]

这一切看起来只是将管理静态文件复制到您的项目文件夹以进行 Web 服务。

【讨论】:

  • 我同意。这似乎是使这些静态文件可用的“正确”方式。
【解决方案5】:

因此,您要做的第一件事是将目录更改为静态文件夹并添加符号链接。

我是在虚拟环境中完成的,所以我使用

ln -s ~/virtualenv/my-virtualenv/lib/python2.x/site-packages/django/contrib/admin/static/admin admin

下一步是编辑你的 httpd.conf

别名 /static/admin/ ~/mysite/static/admin/

重启你的 apache 服务器,瞧!

【讨论】:

    【解决方案6】:

    在 Firebug 中,使用 Net 选项卡并查看浏览器对 css 文件的请求。在那里查看您的请求的响应。我想你会在那里发现问题。
    我最近遇到了同样的问题。问题是当我的浏览器请求 css 文件时,响应包含我项目的登录 html 页面的内容。我现在不记得我是如何解决我的问题的。我会尝试在这里回忆并发布解决方案。
    如果您有同样的问题,请告诉我。

    【讨论】:

      【解决方案7】:

      我遇到了同样的问题,但这些都没有真正的帮助。原来我的 grappelli 版本已经过时了。 (https://github.com/sehmaschine/django-grappelli) 我卸载了它,然后用更新的版本重新安装。 pip install django-grappelli==2.4.4 如果您使用像我这样的管理员皮肤,您可能会考虑更新它。

      【讨论】:

        【解决方案8】:

        尝试添加

        Options FollowSymLinks
        

        给你的

        <Directory /home/django/sgel/media>
            Order deny,allow
            Allow from all
        </Directory>
        

        这样你就结束了

        <Directory /home/django/sgel/media>
            Options FollowSymLinks
            Order deny,allow
            Allow from all
        </Directory>
        

        【讨论】:

        • 我添加了Options FollowSymLinks 并重新启动了Apache。仍然没有快乐。
        【解决方案9】:

        我不确定这是否会有所帮助,但在我的配置文件中我有:

            Alias /adminmedia/ /var/lib/python-support/python2.6/django/contrib/admin/media/   
        
            <Directory "/var/lib/python-support/python2.6/django/contrib/admin/media"> 
                    AllowOverride None                                                 
                    Options FollowSymLinks                                             
                    Order allow,deny                                                   
                    Allow from all                                                     
            </Directory>
        

        它可以工作,但我的服务器设置为仅用于开发/测试。

        【讨论】:

          【解决方案10】:

          我曾经遇到过同样的问题,我通过使用 FireFox 插件 firebug 解决了这个问题,它告诉您您的站点在哪里寻找媒体文件,以及您如何检查 admin/media 文件夹的内容以查看是否他们是空的?

          【讨论】:

          • 我刚刚导航到文件夹?
          【解决方案11】:

          我知道它已经解决了,但我认为值得分享我的解决方案。

          我只是在 apache 中添加了别名,到目前为止它仍然有效。

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

          【讨论】:

          • 完美。就我而言,它是/usr/lib/pymodules/python2.6/django/contrib/admin/media。应该cd /usr/libls -a -R | grep -i media 看看自己的操作系统和python 版本下的目录是什么。
          【解决方案12】:

          你能跑吗

          python
          >>> import django
          >>> print django.__file__
          

          另一个问题 - 您的普通媒体是否放入 /home/django/sgel/media/ 工作(即按预期由 Apache 提供服务?)

          【讨论】:

          • >>> import django >>> print django.__file__ /usr/lib/python2.6/site-packages/django/__init__.pyc >>> 我不提供任何媒体文件我现在的网站...
          • 尝试将一些 test.txt 文件放入您的媒体文件夹并测试打开 www.sgel.com/test.txt。如果未打开,则问题通常出在您的 Apache 配置上,而不是在 admin-cpecific 媒体中
          • 好消息 - 这意味着 apache 正确地提供静态服务。当您创建一个符号链接时,您是否有可能将 django 的管理媒体目录添加到系统中?尝试以下操作:重新安装 django; cd /home/django/sgel/media/;如上所述检查 django 位置;运行 ln -s DJANGO_LOCATION/contrib/admin/media admin
          【解决方案13】:

          您是否尝试为

          设置值

          MEDIA_ROOT MEDIA_URL ADMIN_MEDIA_PREFIX

          正确吗?

          我的意思是 MEDIA_ROOT url 和 ADMIN_MEDIA_PREFX 应该有不同的值。请在您的 settings.py 中检查这些值,然后重试。

          希望这会有所帮助。

          【讨论】:

            【解决方案14】:

            我在 Win32(内置开发服务器)上运行 Bitnami Django Stack 时遇到了同样的问题

            我通过在安装中找到缺少的 CSS 文件夹并更改 settings.py 解决了这个问题。

            # Additional locations of static files
            STATICFILES_DIRS = (
                'C:/Program Files/BitNami DjangoStack/apps/django/django/contrib',
            )
            

            这将帮助您开始开发...这不是最佳选择。不要忘记结尾的逗号:)

            【讨论】:

              【解决方案15】:

              当我们谈到 django 时,我们应该知道我们运行的是哪个版本。 "ADMIN_MEDIA_PREFIX" 用于 django 1.4 之前的版本,见

              The included administration app django.contrib.admin has for a long time 
              shipped with a default set of static files such as JavaScript, images and 
              stylesheets. Django 1.3 added a new contrib app django.contrib.staticfiles 
              to handle such files in a generic way and defined conventions for static 
              files included in apps.
              Starting in Django 1.4, the admin's static files also follow this convention, 
              to make the files easier to deploy. In previous versions of Django, it was 
              also common to define an ADMIN_MEDIA_PREFIX setting to point to the URL where 
              the admin's static files live on a Web server. This setting has now been deprecated 
              and replaced by the more general setting STATIC_URL. Django will now expect to 
              find the admin static files under the URL <STATIC_URL>/admin/.
              

              https://docs.djangoproject.com/en/dev/releases/1.4/。 我正在使用 django 1.4,但仍然对此感到困惑。

              【讨论】:

              【解决方案16】:

              如果没有任何帮助,请将以下内容添加到 urls.py

              url(r'^media/(?P<path>.*)$', 'django.views.static.serve', { <br/>
                          'document_root': '/usr/lib/python2.4/site-packages/django/contrib/admin/media/', <br/>
                         'show_indexes' : True, <br/>
                      }), <br/>
              

              这与apache或nginx无关

              【讨论】:

                【解决方案17】:

                如果您像我一样使用virtualenvwrapper,那么您可以通过以下方式找到您的管理媒体文件并进行修复:

                workon <project_name>
                export DJANGO_BASEFILE=`python -c 'import django; print django.__file__'`
                export DJANGO_BASEDIR=$(dirname ${DJANGO_BASEFILE})
                ln -s $DJANGO_BASEDIR/contrib/admin/media <project_dir>/media/admin
                

                &lt;project_name&gt; 替换为您的virtualenvwrapper 环境名称,将project_dir 替换为您的工作目录。 :)

                【讨论】:

                  【解决方案18】:

                  就我而言,这个问题是在 Ubuntu 服务器上设置 nginx 后发生的。在分析文件结构时,我发现静态文件目录(django 查找要添加到STATIC_ROOT 的静态文件的位置)中缺少 admin 文件夹。因此,我将管理文件夹(在静态目录内)复制到服务器的静态文件夹中。 然后运行

                  python manage.py collectstatic
                  

                  现在,django 收集了管理页面样式所需的 130 个文件。

                  【讨论】:

                    【解决方案19】:

                    我是安什·夏尔马。我也遇到了同样的问题,这太可怕了。在这里,我有一些可以解决问题的东西。转到您的设置文件并制作

                    DEBUG = TRUE
                    

                    我希望这能解决您的问题 快乐编码。 安什·夏尔马

                    【讨论】:

                    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
                    【解决方案20】:

                    我想添加到亚当的解决方案,

                    首先你需要在 cpanel 中安装 dj-static。所以在 requirements.txt 中添加 dj-static==0.0.6 然后安装

                    dj-static==0.0.6
                    

                    然后编辑项目wsgi.py文件:

                    from django.core.wsgi import get_wsgi_application
                    from dj_static import Cling
                    
                    application = Cling(get_wsgi_application())
                    

                    然后重新启动 cpanel。希望管理员有一个正确的外观。谢谢

                    【讨论】:

                      猜你喜欢
                      • 2015-12-12
                      • 2011-11-06
                      • 1970-01-01
                      • 2021-10-14
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2011-06-23
                      • 1970-01-01
                      相关资源
                      最近更新 更多