python---django中STATIC_ROOT和STATIC_URL以及STATICFILES_DIRS

先引入两篇相关文章,从中了解更为详细

django 静态资源配置详解

django静态文件配置

Django的STATIC_ROOT和STATIC_URL以及STATICFILES_DIRS(先看)

1.STATIC_URL

#这个必须配置
STATIC_URL = '/statics/'
  
#这个可以不用配置
STATICFILES_DIRS = (
os.path.join(BASE_DIR,'statics'),#BASE_DIR是项目根目录(绝对路径)
)

其中STATIC_URL是用资源路径前缀,用于访问资源时使用STATIC_URL即可,

STATIC_URL是对于每个项目APP的静态资源存放路径

#各个项目路径
INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'blog', 'ts' )

blog项目:

blog
    statics(当前app静态资源路径)
            jquery.js
    ...

其中statics目录就是STATIC_URL,每个项目APP的静态资源存放路径都应该为STATIC_URL

并且STATIC_URL必须存在,才能在模板文件中使用

<script src="statics/jquery.js"></script><!--statics是STATIC_URL前缀,与其保持一致-->

若是不存在STATIC_URL,会报错:

#django.core.exceptions.ImproperlyConfigured: You're using the staticfiles app without having set the required STATIC_URL setting.

2.STATICFILES_DIRS

STATICFILES_DIRS不是必须存在

其中STATIC_URL代表各个APP中的静态资源存放路径,放在各个APP目录下

而STATICFILES_DIRS则是放在项目根目录下

STATICFILES_DIRS = (
    os.path.join(BASE_DIR,'statics'),
)

项目文件分布:

HelloWorld    项目
   HelloWorld(全局文件存放,项目启动产生)
    settings
    urls
    wsgi blog (APP) statics (静态资源文件) ... ts (APP) statics ... statics (项目根目录下静态资源文件)
  
common_static(STATIC_ROOT使用)
   ...

一般:当STATICFILES_DIRS存在时,首先到STATICFILES_DIRS里面寻找静态文件,其次再到各个app的statics文件夹里面找

不存在STATICFILES_DIRS时,会直接根据STATIC_URL去APP目录下查找,但是记住,STATIC_URL是必须要添加的

3.STATIC_ROOT

STATIC_ROOT = os.path.join(BASE_DIR, 'common_static')#名字自己随意,必须创建这个文件夹

在生产环境中,集中存放静态资源有利于管理使用静态资源

配置完STATIC_ROOT以后,需要执行

python manage.py collectstatic

命令,配合STATIC_ROOT,会自动将各个app(包括STATICFILES_DIRS中的)下的静态文件集中到STATIC_ROOT目录下。

Type 'yes' to continue, or 'no' to cancel: yes

记得不是y,是yes

其中会发现,对于python manage.py collectstatic这个命令,发现可以将STATICFILES_DIRS的资源添加(而且默认会将admin中的静态文件也加入),但是当STATIC_URL中指定文件夹为statics(或者其他)时,不会添加到STATIC_ROOT指定文件夹中,但是在APP目录下单纯添加static文件夹,而不修改STATIC_URL路径,依然是

STATIC_URL = '/statics/'

当执行python manage.py collectstatic

命令是,会将static文件夹中静态文件加入到STATIC_ROOT中

blog
    statics    (不会添加氮STATIC_ROOT中,但是STATIC_URL指向他)
    static     (会添加到STATIC_ROOT中但是STATIC_URL没有指向)
    ...

所以为了避免不必要的坑,最好选择直接使用

STATIC_URL = '/static/'
原文地址:https://www.cnblogs.com/ssyfj/p/8641174.html