繁体   English   中英

Django 管理页面缺失 CSS

[英]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你能看到管理媒体吗?
  • 运行 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 的回答中的建议重新创建符号链接。

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

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

其次,您使用了与您在 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM