Django 2.2版
Python 3.6.9
Ubuntu 18.04.4
在Nginx托管静态文件时,Django管理站点无法加载静态文件(CSS / JS)
在开发中,我将静态文件放入my_project/static/
,在生产中,我进行了python manage.py collectstatic
。所有静态文件都收集在/srv/my_site_static/
中。文件夹/srv/my_site_static/admin
包含4个用于django管理站点的 js,img,fonts,css 文件夹。
我使用Nginx托管静态文件。我编写的应用程序使用下面的Nginx设置正确加载了静态文件。唯一的问题是我的 http://my_site.com/admin 无法加载 css / js 。
Django settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'ckeditor', # for blog, articles, html pages
'ckeditor_uploader', # for blog, articles, html pages
'user_blog',
'product_info', # product info page
]
STATIC_URL = 'static/'
MEDIA_URL = 'media/'
# Use these in production mode
STATIC_ROOT = '/srv/my_site_static/'
MEDIA_ROOT = '/srv/my_site_media/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]
我的nginx设置:
server {
listen 9000; # nginx public server
server_name 127.0.0.1;
location /static/ {
autoindex on;
alias /srv/my_site_static/; # Set this to your STATIC_ROOT
}
location /media/ {
autoindex on;
alias /srv/my_site_media/; # Set this to your MEDIA_ROOT
}
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://127.0.0.1:8000; # the django server
}
}
在这里,我的Nginx不在乎对 my_site.com/admin/xxxxxxxx 的请求,因此我会将它们全部传递给Django服务器。 Django表示找不到文件http://my_site.com/admin/login/static/admin/css/base.css
(这是来自django admin的登录页面)。但是使用我的Nginx,可以找到文件http://my_site.com/static/admin/css/base.css
...在管理站点的settings.py中应该在哪里更改?
如何正确加载管理站点静态文件?使用Nginx还是Django服务器?
感谢您的帮助!