我们将 HTML 文件默认放在templates
文件夹下;将网站所使用的的静态文件放在static
文件夹下。
静态文件:前端已经写好的,能够直接调用的文件
已经写好的网站 js 文件、CSS 文件、图片文件、第三方的前端框架
Django 是不会自动创建static
文件夹的,需要我们手动创建,这里不需要将文件
可以直接将第三方框架直接放入 static
文件夹下,也可以再建一个other
文件夹存放。
静态文件资源接口配置
普通的功能接口,需要在urls.py
中先做路由与视图的关联,再在视图层中写功能;
静态文件资源的配置就不需要那么麻烦!
在settings.py
文件中需要手动书写配置,注意变量名全大写
# 拼接 static 文件夹路径,并且放入列表中
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
os.path.join(BASE_DIR, 'static1'),
os.path.join(BASE_DIR, 'static2'),
]
静态文件接口请求原理
在settins.py
中,我们能够发现一个变量STATIC_URL
STATIC_URL = '/static/'
那么这里的'/static/'
和我们手写的配置中最终拼接的static
文件夹名有何关联呢?
对于我们拼接出的STATICFILES_DIR
中的路径来说,毫无疑问的,就是静态文件所处的路径!
对于STATIC_URL
来说,后面的'/static/'
相当于一种访问令牌,即 当访问的 URL 路径中包含了'/static/'
时,Django 会自动地将URL 路径'/static/'
后的字符 当做资源来查找,查找的路径就是我们手写STATICFILES_DIR
列表中的路径,并且顺序是从前到后,查找到会立即返回,不会继续查找
也就意味着STATIC_URL
可以随意修改,只要在请求资源的时候,按照修改后的方式,再加上资源名,同样可以请求到
静态文件实例
settins.py
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
os.path.join(BASE_DIR, 'static1'),
os.path.join(BASE_DIR, 'static2'),
]
static
文件夹a.txt
from static
static1
文件夹a.txt
from static1
static2
文件夹a.txt
from static2
启动 Django 项目,并且请求资源
调换一下顺序, 并且修改一下令牌
STATIC_URL = '/xxx/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static2'),
os.path.join(BASE_DIR, 'static1'),
os.path.join(BASE_DIR, 'static'),
]
HTML 文件动态解析静态文件路径
在 HTML 文件中,需要导入的静态文件很多的时候,如果修改了STATIC_URL
,那么每一个静态文件路径的前缀都要修改,十分麻烦
动态解析语法
{% load static %}
<link rel="stylesheet" href="{% static ‘文件名’ %}">
<script src="{% static ‘文件名’ %}"></script>
文件名会从STATICFILES_DIRS
的路径中依次寻找