21.Django静态资源

配置静态文件

打开setting.py将django.contrib.staticfiles添加到installed_apps里面。 默认已添加。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp.apps.MyappConfig',
]

STATIC_URL

默认也有,这里的目录指的是每个app的静态文件目录

STATIC_URL = '/static/'
mysite/
    mysite/
        setting.py
        ...
    blog/
       static/ # 这个目录,便是我们所设置的 STATIC_URL
            blog/
                css/
                   main.css
                js/
                images/
        ...    
manage.py

{% load static %}

使用在模版中

<!DOCTYPE html>
{% load static %} #加载静态文件
<html lang="en">
<head>

使用{% static 'file path' %}加载本来文件

<img src="{% static '/images/avatar.png' %}" alt="">

STATICFILES_DIR 公用静态文件目录

上面的方式是每个app里面独立的资源文件,那么如果存在多个app的时候,又有相同的 资源文件(比如默认头像),怎么办呢?

如果每个都放那就有点重复了,STATICFILES_DIR就是用来解决这个问题的。
setting.py

STATICFILES_DIR = [
    os.path.join(BASE_DIR, 'static')
]

目录结构

mysite/ 
     mysite/
         setting.py 
         ...
      blog/
         static/ # STATIC_URL   
              images/
manage.py 
static/ # STATICFILES_DIR 
     comments/
        images/
            avatar.png

加载这个目录的文件和上面的方式是一样的。

STATIC_ROOT

STATIC_ROOT目录的作用主要是运行环境的区别。
当setting.py中DEBUG= True时,Django会依据静态文件配置目录查找静态资源
当setting.py中DEBUG= False时,Django就不会处理了,需要使用web服务器处理,比如nginx ,这个时候需要将静态资源统一收集到一起,方便配置。

setting.py

STATIC_ROOT = os.path.join(BASE_DIR, 'static_all')

设置好STATIC_ROOT后执行

python3 manage.py clooectstatic

项目根目录将增加static_all目录,里面收集也所有的静态资源。
然后在服务器配置此目录即可。
比如nginx:

location /static/ {
    alias /usr/xxx/mysit/static_all/;
}
声明:原创文章,版权所有,转载请注明出处,https://litets.com。