django放到阿里云之后,网站前端样式丢失,反而admin的样式没有丢失,找了很多教程,都说是admin样式丢失,我的情况正好相反,admin的样式在,但是网站的样式丢失了
环境是阿里云 ubantu 20 64位
django项目虚拟机的位置在var/www/datavis
项目放在var/www/datavis/project_my_blog下
nginx.conf是这样配置的(这里有个另外的问题,没有配置media文件,但是网站中所有放在media的图片都能显示)
server{
listen 80;
server_name 47.103.43.207;
charset utf-8;
location /static {
# 指定静态文件存放的目录
alias /var/www/datavis/project_my_blog/static;
}
location /media {
alias /var/www/datavis/peoject_my_blog_local/media;
}
location / {
uwsgi_pass 127.0.0.1:8000;
include /etc/nginx/uwsgi_params;
}
uwsgi是这么配置的
[uwsgi]
chdir = /var/www/datavis/project_my_blog
module = project_my_blog.wsgi:application
home = /var/www/datavis
socket = 127.0.0.1:8000
master = true
processes =4
chmod-socket =666
vacuum =true
settings.py中是这么配置的,其中strtic的路径也是用过STATIC_ROOT = os.path.join(BASE_DIR,'static')的形式配置过,也不行
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static")
]
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR,'media')
也尝试过网上的教程用python manage.py collectstatics把静态文件全部放到根目录下,收集完成后目录如下,无论是在使用python manage.py collectstatics之前,还是之后,后台admin的样式都可以使用,前端界面都不能用,我总感觉应该是nginx.conf没有配置对,没有去读取相应的静态目录,但又不知道具体怎么回事(比如后台admin的相识就读取到了,哪怕是在使用collectstatics命令之前)
咋回事,网上的教程都是admin的样式都是。。。
您应该在settings.py中设置STATICFILES_DIRS设置,以映射到存储CSS,JS和图像的静态文件夹。
STATICFILES_DIRS = ( os.path.join(BASE_DIR, "static"), '/var/www/static/', )
在您项目的urls.py中,您必须具有以下代码段:
from django.conf.urls import include, url
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
...
]
+ static(settings.STATIC_URL, document_root=settings.STATICFILES_DIRS) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT
参考:
https://blog.csdn.net/bill20100829/article/details/113917159
部署¶
django.contrib.staticfiles
提供了一个方便管理命令,用于将静态文件收集到一个目录中,以便您可以轻松地为它们提供服务。
将STATIC_ROOT
设置设置为您要从中提供这些文件的目录,例如:
STATIC_ROOT = "/var/www/example.com/static/"
运行collectstatic
管理命令:
$ python manage.py collectstatic
这会将所有文件从静态文件夹复制到 STATIC_ROOT
目录中。
使用您选择的Web服务器来提供文件。部署静态文件涵盖了一些常见的静态文件部署策略。
settings.py
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]
# 这里设置服务器静态文件的存储地址
STATIC_ROOT = '/var/www/datavis/project_my_blog/static'
urls.py
urlpatterns = [
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
然后最重要的是在项目根目录执行python manage.py collectstatic 将静态资源拷贝到前面设置的目录中