Django中静态文件之各个配置详解

关于静态文件的部分,有兴趣的可以去官网看看:
Django3.2 关于管理静态文件 (不必纠结Django是哪个版本,关于静态文件的配置的都一样)
当然,觉得官网介绍的太复杂的话,接下来可以看我写的部分:

假设创建了一个名为myweb的项目,那么项目文件目录应该是这样的:

C:\Users\Administrator\Desktop>django-admin startproject myweb
C:\Users\Administrator\Desktop>cd myweb
C:\Users\Administrator\Desktop\myweb>tree /f
文件夹 PATH 列表
卷序列号为 000000C9 E6A5:0777
C:.
│  manage.py          #与manage.py同级的目录就是当前项目文件夹下
│
└─myweb
        settings.py
        urls.py
        wsgi.py
        __init__.py
关于静态文件的配置部分在settings.py文件中进行配置,那么。。。
Django有哪些关于静态文件的配置?
  1. django.contrib.staticfiles:创建项目后,默认就有,作用是用来处理静态文件的,但是只针对于debug=true,如果debug=false时,就无法正常使用了(之后会讲如何正确加载静态文件)。
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles'        #debug=true时,就由这里的配置处理静态文件
]

2.STATIC_ROOT:这个是配置静态文件存放目录,另外一个作用就是运行收集静态文件的命令(关于命令的部分后面会讲)时,最终静态文件收集存放的位置,注意,这个配置只会在debug=false时生效(生产环境)(至于为什么之后会讲)。

    #vim settings.py    ->在settings.py中配置STATIC_ROOT
   STATIC_ROOT = os.path.join(BASE_DIR, 'static')    
   #指定当前项目目录下的static文件夹用于存放静态文件
   # BASE_DIR指的是当前项目的路径,Django会自动帮我们处理
   #os.path.join()会拼接后面的路径
  1. STATIC_URL:毫无疑问,这个是我们在编写HTML文件时,书写静态文件路径时用到的,例如我们在HTML文件中如果想加载某个静态文件时,就需要写出该文件的路径,有了这个配置后,我们就不需要写静态文件的具体路径
    #Django默认配置
    STATIC_URL = '/static/'

4.STATICFILES_DIRS:在实际项目开发中,如果我们的静态文件存放在一个或多个目录时,可以定义一个列表,用于存储静态文件,django默认配置并没有这个配置,如果需要,请自己定义,当项目下存在一个或多个静态资源的目录时,非常适合这样定义。注意,这个配置只在debug=true时生效(开发环境)

  #vim settings.py    ->在settings.py中配置STATICFILES_DIRS
   STATICFILES_DIRS = [
          os.path.join(BASE_DIR, 'templates/frontweb/static'),
          os.path.join(BASE_DIR, 'static'), 
          BASE_DIR / "static",
          '/var/www/static/',     #绝对路径,非相对路径
          ("downloads", "/opt/webfiles/stats"),    #给文件夹起别名
          #以上几种方法均可

          os.path.join(BASE_DIR, '/static'), 
          #这种方式会找不到静态文件,os.path.join()方法会自动拼接‘/’,因此一定要注意,加了‘/’,就会出现找不到的情况
      ]
  • 注:这里我们可以看到STATIC_ROOTSTATICFILES_DIRS的作用实际上是类似的,因此,这两个配置并不需要同时定义,在开发时,我们可能会定义多个静态资源文件夹,但是最终项目还是要部署的,因此最后静态资源会统一进行收集,部署时,一般只需要定义STATIC_ROOT这一个配置就好,并且如果同时用STATIC_ROOTSTATICFILES_DIRS的方式重复定义了同一个文件夹作为静态资源存放路径,反而会报错,例如:
  #  这里进行了重复定义,程序会报错
  STATIC_ROOT = os.path.join(BASE_DIR, 'static')
  STATICFILES_DIRS = [
      os.path.join(BASE_DIR, 'static'), 
      ]

 #会报以下错误:
django.core.management.base.SystemCheckError: SystemCheckError: System check identified some issues:
ERRORS:
?: (staticfiles.E002) The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting.

System check identified 1 issue (0 silenced).
  1. MEDIA_URL:用法同STATIC_URL,方便我们在编写代码时书写路径。
    #vim setting.py    -> MEDIA_ROOT配置
    MEDIA_URL = '/media/'
  1. MEDIA_ROOT:作用同STATIC_ROOT,用于定义媒体资源存放路径。
    #vim setting.py    -> MEDIA_ROOT配置
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

可能会有疑问,既然已经有了static静态文件配置,为什么还要再配置media?
原因是分工不同,static存放的是静态资源,而media虽然也存放相关资源,但存放的是用户自己上传的资源,例如头像,文件等,这个时候放在static文件夹里面显然不合适。
因此,网站开发时所需的图片等静态资源是依然存放在static文件夹中,而不是media文件夹。

  1. {% load static %}:如果在HTML中使用了static方法引入的路径,就需要在HTML中引入,否则,文件将依然无法找到,下面举个例子,如何在HTML中正确引用静态资源。
     
{% load static %}       #在此处引用static标签,


    
    首页

  #假设在static文件夹下存在picture,里面有一个名为1.png的文件,这两种方法都能成功加载出来
  #css和js引用方法类似,不做演示
 

 #第一种就是django提供的模板语法,因此使用前需要load static一下
 #第二种是通过配置的STATIC_URL找到的该文件。
 #这两种写法的好处就是当静态文件目录发生变化时,不需要再到HTML中手动修改,只需修改相应的配置即可。当然,你也可以通过写相对路径的方式成功加载。

8.templates:定义HTML模板文件存放目录,如果你用的是pycharm的IDE的话,在创建项目时,可以根据配置自动创建一个templates目录,pycham会自动帮我们配置,如果没有配置,就需要手动创建,当然,你也可以选择自定义该目录

    # vim ./setting.py  ->配置templates模板文件夹
  TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        # 这里就是定义templates模板文件存放位置的配置,意思是当前项目文件下的templates文件夹,前提是templates文件夹存在

        # 下面部分配置省略
    },
]

9.collectstatic:在项目部署时,我们还要进行静态文件的收集,如果手动收集静态文件的话,工程量无疑很大,而且部署后,debug肯定要改为debug=false,这时如果不进行静态文件的收集的话,django自带的部分,如admin后台就会出现CSS无法加载的问题,因此,项目部署前,这个操作是是必须的。
django的django.contrib.staticfiles提供了一个收集静态文件的命令:python manage.py collectstatic,执行该命令后,会将静态文件收集到配置好的STATIC_ROOT

   C:\Users\Administrator\Desktop\myweb>python manage.py collectstatic


这些就是关于静态资源配置的讲解了

你可能感兴趣的:(Django中静态文件之各个配置详解)