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

2024-06-10 12:40:41 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

这是我转到的URL,http://127.0.0.1/admin/,login部分显示得很好。但是,没有样式。

我通过以下方式将文件从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"所以,这应该是问题所在。我该怎么解决?管理员是否已处理将静态url添加到管理员媒体前缀?

编辑2

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

在my 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

Tags: 文件django编辑admin管理员usernamesitestatic
3条回答

我在生产中连接Django管理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

完成!

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

I copied the files over from the sitepackages/django/contrib/admin directory to /Users/username/Projects/django/cake/static/admin. I can see the files are there.

不需要复制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

更新

I don't use the django development server; I'm running apache.

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

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

deployment docs中介绍了它,尽管在开发时,使用内置的开发服务器要容易得多,因为每当您更改任何源文件时,它都会自动重新启动。

如果将apache与mod_wsgi一起使用,那么每次更改源文件时都必须手动重新启动apache。

相关问题 更多 >