无法让Django管理员在Apache上找到静态文件(css,img,js)

时间:2013-06-07 14:20:25

标签: python django apache localhost admin

我正在我的mac上创建一个Django开发环境,而管理员没有找到用于样式化的媒体文件。这是我的settings.py文件:

STATIC_ROOT = '/Users/username/Projects/django/cake/static/'
STATIC_URL = '/static/'
ADMIN_MEDIA_PREFIX = '/static/admin/'

这是我转到的网址http://127.0.0.1/admin/,登录部分显示就好了。然而,没有造型。

我将文件从sitepackages/django/contrib/admin/media/目录复制到/Users/username/Projects/django/cake/static/admin/,通过:

cp -r /Users/username/.virtualenvs/django/lib/python2.7/site-packages/django/contrib/admin/media/ ./

我可以看到文件在那里。

修改

我只是查看了源代码,这是用于css的路径:href="/static/admin/css/base.css"所以,这应该是问题所在。我该如何解决这个问题?管理员是否已经处理将static_url添加到admin_media_prefix?

编辑2

如果我在admin_media_prefix中硬编码完整路径,它仍然不使用样式表。

在我的settings.py中:

ADMIN_MEDIA_PREFIX = '/Users/username/Projects/django/cake/static/admin/'

源代码显示:

href="/Users/username/Projects/django/cake/static/admin/css/base.css"

当我去那个目录时,CSS文件就在那里......

编辑3

这些是在我的apache配置中:

Alias /site_media/ /Users/username/Projects/django/cake/media
Alias /static/ /Users/username/Projects/django/cake/static
Alias /media/ /Users/username/.virtualenvs/django/lib/python2.7/site-packages/django/contrib/admin/media

5 个答案:

答案 0 :(得分:3)

  

我从sitepackages / django / contrib / admin复制了文件   目录到/ Users / username / Projects / django / cake / static / admin。我可以   看文件在那里。

无需复制sitepackages/django/contrib/admin中的所有文件。只需使用...

复制目录sitepackages/django/contrib/admin/static/admin即可
cp -R /path/to/sitepackages/django/contrib/admin/static/admin /Users/username/Projects/django/cake/static

...或者如果您不打算更改管理页面,符号链接就足够了......

ln -s /path/to/sitepackages/django/contrib/admin/static/admin /Users/username/Projects/django/cake/static

<强>更新

  

我不使用django开发服务器;我正在运行apache。

Django开发服务器会自动处理/static/目录,但是如果您尝试通过apache执行此操作,则必须在apache配置中添加Alias指令, ......的线条。

Alias /static /Users/username/Projects/django/cake/static

它涵盖在deployment docs中,虽然在开发过程中,使用内置开发服务器要容易得多,因为每当您更改任何源文件时它都会自动重启。

如果您正在使用带有mod_wsgi的apache,那么每次更改源文件时都必须手动重启apache。

答案 1 :(得分:0)

  1. 检查复制的管理文件的权限。它们的权限是否与成功访问的其他静态文件的权限相同?
  2. 检查浏览器调试器中的加载错误(是404还是其他)
  3. 您使用的是django的manager.py命令collectstatic吗?这就是我用来收集目录中的静态文件。请参阅Django collectstatic

答案 2 :(得分:0)

我在生产中连接Django Admin CSS的解决方案是:

<强> /etc/apache2/apache2.conf中

Alias /static/ /home/aaron/public_html/samapet.com/kennel/static/
<Location "/static/">
    Options -Indexes
</Location>
在settings.py中

STATIC_ROOT = /home/aaron/public_html/samapet.com/kennel/static/ # Path to Static Dir
STATIC_URL = '/static/'

重要,不要忘记

然后在生产服务器SSH shell中运行./manage.py collectstatic

完成!

答案 3 :(得分:0)

我得到了简单的解决方案,我查看了/ var / log / httpd /

中的access_log文件
127.0.0.1 - - [28/Dec/2013:14:49:20 -0500] "GET /static/admin/css/login.css HTTP/1.1" 200 836 "http://127.0.0.1/admin/" "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.24) Gecko/20111109 CentOS/3.6.24-3.el6.centos Firefox/3.6.24"

使用

在/etc/httpd/conf/httpd.conf文件中配置静态路径
Alias /static /usr/lib/python2.6/site-packages/django/contrib/admin/static

<VirtualHost 127.0.0.1:80>标记内,

然后我使用

重新启动服务

service httpd restart

工作!!!

答案 4 :(得分:0)

我有同样的问题,但python manage.py collectstatic没有解决我的问题,所以我不得不将css文件直接复制到我的静态文件夹中!

$path_to_my_app/static$ tree -L 1
.
├── css
├── fonts
└── js

使用我的配置(ubuntu 12.04和python 2.7),admin css和js静态文件目录的目录在这里:

/usr/local/lib/python2.7/dist-packages/django/contrib/admin/static

然后我将admin文件夹从上面的路径复制到我的应用程序的静态路径,所以它看起来像这样:

.
├── admin
├── css
├── fonts
└── js

这对我有用。