Django Admin Page缺少CSS

时间:2011-04-04 10:33:13

标签: python css django django-admin

我看到了这个question以及Django Projects here的推荐,但仍无法使其发挥作用。我的Django Admin页面根本没有显示CSS。

enter image description here

这是我目前的配置。

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 当我在ls -la文件夹

中输入/media/admin
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/,但仍然无法正常工作

19 个答案:

答案 0 :(得分:13)

除了纠正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的回答中的建议重新创建符号链接。

答案 1 :(得分:7)

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

首先,源和目标需要反过来(我自己总是错了)。

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

这样做:

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

答案 2 :(得分:6)

简单的解决方案是更改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())

让Admin CSS正确显示的最简单方法。干杯

答案 3 :(得分:4)

我刚发现的另一种方法,它看起来像是一个得到适当支持的方法。

确保您的设置中包含staticfiles模块。还配置STATIC_ROOT选项。

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

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

使用/ static / alias配置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服务。

答案 4 :(得分:3)

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

我在虚拟环境中这样做,所以我使用

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

下一步是编辑你的httpd.conf

  

Alias / static / admin /〜/ mysite / static / admin /

重启你的apache服务器,瞧!

答案 5 :(得分:2)

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

答案 6 :(得分:2)

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

答案 7 :(得分:1)

你能跑吗

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

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

答案 8 :(得分:1)

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

我只是在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/

答案 9 :(得分:1)

我以前有同样的问题,我通过使用FireFox插件firebug来解决它,它告诉你你的网站在哪里寻找媒体文件,你也是如何检查admin / media文件夹的内容以查看是否他们是空的?

答案 10 :(得分:1)

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

    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>

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

答案 11 :(得分:1)

尝试添加

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>

答案 12 :(得分:0)

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

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

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

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

答案 13 :(得分:0)

您是否尝试设置

的值

MEDIA_ROOT MEDIA_URL ADMIN_MEDIA_PREFIX

正确?

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

希望这有帮助。

答案 14 :(得分:0)

如果没有任何帮助,请将以下内容添加到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无关

答案 15 :(得分:0)

当我们谈到django时,我们应该知道我们运行的版本。在1.4版本之前的django中使用“ADMIN_MEDIA_PREFIX”,参见

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 :(得分:0)

如果您像我一样使用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

<project_name>替换为您的virtualenvwrapper环境名称,将project_dir替换为您的工作目录。 :)

答案 17 :(得分:0)

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

STATIC_ROOT

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

答案 18 :(得分:0)

我想添加到 Adam 的解决方案中,

首先你需要在 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。希望管理员有一个正确的看法。谢谢