2011-04-04 125 views
21

我看到这个question和来自Django Projects here的推荐,但是仍然无法得到这个工作。我的Django Admin页面根本不显示CSS。Django管理页面丢失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/

UPDATE

在我的httpd.conf文件,

User django 
Group django 

当我在/media目录

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 

-l运行ls应该是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/,但它仍然没有工作

+0

要回答您有关'/ media'下的子目录所有权的问题:否,文件权限不会限制其他用户对这些文件具有读访问权限(请参阅组和其他访问权限上的rx位),所以文件权限不是问题。 – photoionized 2011-04-12 22:35:30

+0

@专业化啊谢谢。仍然让我的脚湿在Linux! – super9 2011-04-13 03:27:08

+0

当您进入/media/admin/css/base.css时,您收到的错误页面是什么? – Wogan 2011-04-13 03:40:00

回答

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直接向/admin/media目录你的Django安装。

要解决你有什么,该media/admin/目录下运行的内部:

rm media 
cd .. 
rmdir admin 

,然后在丹尼尔·罗斯曼的答案建议重新创建符号链接。

+0

更新我的问题! – super9 2011-04-12 03:17:43

+1

@nai从你的更新它看起来像你的管理文件夹是媒体/管理/媒体,但你的settings.py文件说'ADMIN_MEDIA_PREFIX ='/ media/admin /''。如果你按照肖恩所说的那样工作。否则,请将您的settings.py更改为'ADMIN_MEDIA_PREFIX ='/ media/admin/media /'。 – 2011-04-14 02:13:41

+0

@James @Sean Wallace--我想我终于明白了现在发生了什么。我认为发生了什么事情是我在'/ media/admin'中创建了一个媒体文件夹,导致sym链接在'/ media/admin/media'中创建,与'ADMIN_MEDIA_PREFIX'设置不匹配。这实际上是一个非常简单的问题。谢谢你们的帮助。你的评论詹姆斯。它使我的理解中的一切都点击了。 – super9 2011-04-14 02:48:20

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 
+0

我的不好,输入我的部分。我尝试了新的sym链接,但它仍然不起作用。 – super9 2011-04-04 11:16:58

+0

@Nai,这仍然是一个好建议 – ampersandre 2011-04-13 20:44:41

+1

@ampersandre是的,我收回我说的话。在我的评论中是近视。 – super9 2011-04-14 02:50:18

1

,可以在运行

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

的另一个问题 - 不正常的媒体放置到/ home/Django的/ sgel /媒体/工作(即服务通过Apache预期?)

+0

>>>进口的Django >>>打印的Django .__ FILE__ /usr/lib/python2.6/site-packages/django/__init__.pyc >>> 我不服务我的网站上的任何媒体文件此刻... – super9 2011-04-08 02:49:35

+0

尝试将一些test.txt文件放入媒体文件夹并测试打开www.sgel.com/test.txt。如果没有打开,问题在于你的Apache配置一般,而不是在管理特定媒体 – Guard 2011-04-08 07:57:15

+0

我能打开它 – super9 2011-04-08 09:03:38

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> 
+0

我已经添加了'Options FollowSymLinks'并重新启动了Apache。仍然没有快乐。 – super9 2011-04-13 03:35:01

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> 

它的工作原理,但我有我的服务器设置仅用于开发/测试。

1

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

+1

我刚才导航到该文件夹​​? – super9 2011-04-13 04:51:06

2

在Firebug中,使用Net选项卡并查看您的浏览器为css文件所做的请求。请参阅本身对您的请求的回复。我想你会在那里发现问题。
我最近有同样的问题。问题是当我的浏览器请求css文件时,响应包含了我项目登录html页面的内容。我现在不记得我是如何解决我的问题的。我会尽力在这里回顾并发布解决方案。
让我知道你是否有同样的问题。

0

你有没有尝试

MEDIA_ROOT MEDIA_URL ADMIN_MEDIA_PREFIX

正确设置值?

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

希望这会有所帮助。

+0

我已经接受了答案。无论如何感谢您的帮助。 – super9 2011-04-14 07:16:42

0

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

我在安装寻找丢失的CSS文件夹和改变settings.py解决的问题。

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

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

4

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

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

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

创建/静态/文件夹,并设置权限。

使用/ 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] 

这一切看起来像它是静态的文件复制管理到项目文件夹的网络服务。

+1

我同意。这似乎是使这些静态文件可用的“正确”方法。 – bitcycle 2013-06-02 05:31:41

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/ 
+1

完美。在我的情况下,它是'/ usr/lib/pymodules/python2.6/django/contrib/admin/media'。应该有'cd/usr/lib'和'ls -a -R | grep -i media'来查看目录在一个操作系统和python版本下。 – Alex 2013-04-18 06:22:27

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的

0

当我们谈到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,并且仍然对此感到困惑。

+0

我找到了,它工作。对于使用apache的django 1.4,以下链接将有所帮助:[https://docs.djangoproject.com/en/1.4/howto/deployment/wsgi/modwsgi/#serving-the-admin-files](https:// docs.djangoproject.com/en/1.4/howto/deployment/wsgi/modwsgi/#serving-the-admin-files),[http://stackoverflow.com/questions/9967849/django-1-4-admin-static -files-without-staticfiles-app](http://stackoverflow.com/questions/9967849/django-1-4-admin-static-files-without-staticfiles-app) – 2012-07-05 06:25:26

+0

首先,我将'STATICFILES_DIRS'设置为' “/usr/lib/python2.6/site-packages/django/contrib/admin/static/”'。并将'STATIC_ROOT'设置为'os.path.join(SETTINGS_PATH,'../ static')',其次我使用'collectstatic'将静态文件从'STATICFILES_DIRS'收集到'STATIC_ROOT'。第三,将'STATIC_URL'设置为'/ tdjproj/static /'。第四,将STATIC_URL替换为STATIC_ROOT(例如'Alias/tdjproj/static// var/www/vhost1/tdjproj/static /')。 – 2012-07-05 06:37:51

3

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

我这样做是在虚拟环境下,所以我用

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

下一步是修改httpd.conf

别名/静态/管理/〜/ mysite的/静态/管理/

重新启动你的Apache服务器,瞧!

2

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

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到工作目录。 :)

6

最简单的解决办法是改变线路在wsgi.py文件

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

变得正常有联系CSS显示

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

    application = Cling(get_wsgi_application()) 

最简单的方法。干杯