Django项目上线后无法加载xadmin等的静态文件问题(django的settings中几个static设置项的关系)

多数是static的settings.py设置问题.
这里不设置好其他app的static你同样是加载不了

1.settings.py里面这样设置.

STATIC_URL = '/static/'
#这里注意不要和你项目static文件夹名一样,因为这个是用来存放收集来的所有静态文件的.
#如果你设置相同,等运行collectstatic时会警告.
STATIC_ROOT = os.path.join(BASE_DIR, 'static1')

# 我们的静态文件分开三个部分
# 这里我们设为三个路径
STATICFILES_DIRS = [
    os.path.join(BASE_DIR,  'static'),
    os.path.join(BASE_DIR, 'myapp', 'static'),
    os.path.join(BASE_DIR, 'userapp', 'static'),
    ]

上面第一个为项目根目录下static.
下面两个是其他app的static,myapp,和userapp分别是你的其他app的名字
比如xadmin下有static,就应该加上
os.path.join(BASE_DIR, ‘xadmin’, ‘static’)

2.在项目目录下运行

python manage.py collectstatic

这时会把所有刚才你设置指定的static搜集到一个目录

3.在nginx里面设置static目录路径为刚才设置的static1

        charset utf-8;
        location / {
           include uwsgi_params;
           uwsgi_pass 127.0.0.1:8997;
           uwsgi_param UWSGI_SCRIPT blog.wsgi;
           uwsgi_param UWSGI_CHDIR /home/wwwblog/myblog/;
 
        }
        location /static/ {
        alias /home/wwwblog/myblog/static1/; #静态文件目录
        }

下面是相关知识学习.

django的settings中几个static设置项的关系

django的settings中包含三个static相关设置项:
STATIC_ROOT
STATIC_URL
STATICFILES_DIRS

STATIC_URL 好理解,就是映射到静态文件的url,一般为/static/
STATICFILES_DIRS 是个列表,放各个app的static目录及公共的static目录
STATIC_ROOT 是总的static目录,可以使用命令自动收集static文件

更加详细的解释:

STATIC_ROOT:运行manage.py collectstatic后静态文件将复制到的目录。注意:不要把你项目的静态文件放到这个目录。这个目录只有在运行collectstatic时才会用到。我最开始想当然的以为这个目录和MEDIA_ROOT的作用是相同的,致使在开发环境下一直无法找到静态文件。

STATIC_URL:设置的static file的起始url,这个只可以在template里面引用到。这个参数和MEDIA_URL的含义差不多。

STATICFILES_DIRS:除了各个app的static目录以外还需要管理的静态文件位置,比如项目公共的静态文件差不多。和TEMPLATE_DIRS的含义差不多。

各个APP下static/目录下的静态文件django的开发服务器会自动找到,这点和以前APP下的templates目录差不多。

假设有个工程djangodemo,有两个app为demo1跟demo2
django处理static的方法是把各个app各自的static合并到一处

比如
djangodemo/djangodemo/static 放置公共静态文件
djangodemo/demo1/static 放置该app自己的静态文件
djangodemo/demo2/static 放置该app自己的静态文件
可以这么设置:

STATIC_URL = '/static/'
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
	os.path.join(BASE_DIR, 'demo1', 'static'),
	os.path.join(BASE_DIR, 'demo2', 'static'),
)
STATIC_ROOT = os.path.join(BASE_DIR, 'static1')

使用命令

   python manage.py collectstatic

就会自动把所有静态文件全部复制到STATIC_ROOT(即static1)中
如果开启了admin或者(xadmin),这一步是很必要的,不然部署到生产环境的时候会找不到样式文件

猜你喜欢

转载自blog.csdn.net/qq_35531549/article/details/86600406
今日推荐