django部署到阿里云后,网站样式丢失,nginx+uwsgi+ubuntu 20

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 提供了一个方便管理命令,用于将静态文件收集到一个目录中,以便您可以轻松地为它们提供服务。

  1. STATIC_ROOT设置设置为您要从中提供这些文件的目录,例如:

    STATIC_ROOT = "/var/www/example.com/static/"
    
  2. 运行collectstatic管理命令:

    $ python manage.py collectstatic
    

    这会将所有文件从静态文件夹复制到 STATIC_ROOT目录中。

  3. 使用您选择的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 将静态资源拷贝到前面设置的目录中