我看到了这个question以及Django Projects here的推荐,但仍无法使其发挥作用。我的Django Admin页面根本没有显示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
目录
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/
,但仍然无法正常工作
答案 0 :(得分:13)
除了纠正Daniel Roseman建议的符号链接之外,您还需要确保运行Apache的用户具有对管理媒体的读取权限。
ls -l
,是否看到了符号链接?cd admin
,它是否有效?如果您随后运行ls
,您会看到管理媒体吗?如果所有这些都有效,请使用您当前的配置和这些命令的结果更新您的问题,我们将再看看。
对更新的响应:好的,权限看起来不错。看起来你的媒体目录中的目录结构有点不对。
/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。希望管理员有一个正确的看法。谢谢