[英]Django Admin Page missing CSS
我在这里看到了 Django 项目的这个问题和建议,但仍然无法让它工作。 我的 Django 管理页面根本没有显示 CSS。
这是我目前的配置。
设置.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/
时,该文件夹是空的。 所以我将 CSS、IMG 和 JS 文件夹从我的 Django 安装复制到/usr/lib/python2.6/site-packages/django/contrib/admin/media/
中
除了按照 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 的回答中的建议重新创建符号链接。
这里有几个问题,都与您的符号链接有关。
首先,源和目标需要相反(我自己总是弄错)。
其次,您使用了与您在 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
简单的解决方案是更改 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 正确显示的最简单方法。 干杯
我刚刚找到的另一种方法,它看起来像是一个得到适当支持的方法。
确保您的设置中有 staticfiles 模块。 还要配置 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 服务。
因此,您要做的第一件事是将目录更改为静态文件夹并添加符号链接。
我在虚拟环境中做到了这一点,所以我使用
ln -s ~/virtualenv/my-virtualenv/lib/python2.x/site-packages/django/contrib/admin/static/admin admin
下一步是编辑您的 httpd.conf
别名 /static/admin/ ~/mysite/static/admin/
重启你的 apache 服务器,瞧!
我遇到了同样的问题,但这些都没有真正帮助。 原来我的 grappelli 版本已经过时了。 ( https://github.com/sehmaschine/django-grappelli )我卸载了它,然后用更新的版本重新安装。 pip install django-grappelli==2.4.4
如果你像我一样使用管理员皮肤,你可以考虑更新它。
在 Firebug 中,使用 Net 选项卡并查看浏览器对 css 文件发出的请求。 在那里查看对您的请求的响应。 我想你会在那里找到问题。
我最近遇到了同样的问题。 问题是当我的浏览器请求 css 文件时,响应包含我的项目登录 html 页面的内容。 我现在不记得我是如何解决我的问题的。 我会尝试在这里回忆并发布解决方案。
如果您有同样的问题,请告诉我。
你能跑吗
python
>>> import django
>>> print django.__file__
另一个问题 - 您放置在 /home/django/sgel/media/ 中的普通媒体是否正常工作(即按预期由 Apache 提供服务?)
尝试添加
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>
我不确定这是否有帮助,但在我的配置文件中我有:
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>
它有效,但我的服务器仅用于开发/测试。
我曾经遇到过同样的问题,我通过使用 FireFox 插件 firebug 解决了它,它会告诉您您的站点在哪里寻找媒体文件,以及您如何检查 admin/media 文件夹的内容以查看它们是否为空?
我知道它已经解决了,但我认为值得分享我的解决方案。
我只是在 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/
当我们谈论 django 时,我们应该知道我们运行的是哪个版本。 “ADMIN_MEDIA_PREFIX”在1.4之前的django中使用,见
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,但仍然对此感到困惑。
如果您像我一样使用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
替换为您的工作目录。 :)
您是否尝试设置值
MEDIA_ROOT MEDIA_URL ADMIN_MEDIA_PREFIX
正确吗?
我的意思是 MEDIA_ROOT url 和 ADMIN_MEDIA_PREFX 应该有不同的值。 请在您的 settings.py 中检查这些值,然后重试。
希望这可以帮助。
就我而言,此问题是在 Ubuntu 服务器上设置 nginx 后发生的。 在分析文件结构时,我发现 admin 文件夹从 staticfile 目录(django 查找静态文件以添加到STATIC_ROOT
)中STATIC_ROOT
。 因此,我将 admin 文件夹(在静态目录中)复制到服务器的静态文件夹中。 然后运行
python manage.py collectstatic
现在,django 收集了管理页面样式所需的 130 个文件。
我想添加到 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。 希望管理员有一个正确的看法。 谢谢
我是安什·夏尔马。 我也遇到了同样的问题,这太可怕了。 在这里,我有一些可以解决问题的东西。 转到您的设置文件并制作
DEBUG = TRUE
我希望这能解决您的问题 Happy Coding。 安什·夏尔马
我在 Win32(内置开发服务器)上运行 Bitnami Django Stack 时遇到了同样的问题
我通过在安装中找到丢失的 CSS 文件夹并更改 settings.py 解决了这个问题。
# Additional locations of static files
STATICFILES_DIRS = (
'C:/Program Files/BitNami DjangoStack/apps/django/django/contrib',
)
这将帮助您开始开发...这不是最佳选择。 不要忘记尾随逗号:)
这个问题的一个简单答案是将 admin 和 static 文件夹移动到 public_html
我遇到了这个问题,它成功了试试
如果没有任何帮助,请将以下内容添加到 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.