Skip to main content
 首页 » 编程设计

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

2024年08月29日37dflying

我正在我的 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/,登录部分显示得很好。但是,没有样式。

我将文件从 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 

请您参考如下方法:

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 

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

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.

/static/ 目录由 Django 开发服务器自动处理,但如果您尝试通过 apache 执行此操作,则必须添加一个 Alias 在你的 apache 配置中的指令,沿着...

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

它包含在 deployment docs 中,尽管在您进行开发时,使用内置的开发服务器要容易得多,因为只要您更改任何源文件,它就会自动重启。

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