一、静态资源的分类
1、开发所需要的,css,image,js
- 根目录的 /static/
- 已经app目录下载 /static/ 文件夹下
2、媒体文件,用户上传的数据(Excel,PDF,video)
用户上传的数据也可以上传到文件服务器,如顺丰云的oss
- 根目录的 /media/
二、静态文件
1、项目结构
D:\TMP\DEMO\
├─app01 # app,内部结构略
| └─static
| └─index.css
├─demo
| └─settings.py
├─static
| ├─jquery-2.2.3.min.js
| ├─a.jpg
│ └─bootstrap
│ ├─css
| └─bootstrap.css
│ └─js
| └─bootstrap.js
└─templates
├─books.html
└─form.html
2、静态文件的引入
a、引入顺序,先找根目录下的static文件,如果没有再找APP目录下的static文件
import os
INSTALLED_APPS = [
# 这个app必须写,不写前端访问404
'django.contrib.staticfiles'
]
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_URL = '/static/' # 通过别名指向STATICFILES_DIRS目录,当然,别名也可以修改
STATICFILES_DIRS = [ # 列表或者元组都行
os.path.join(BASE_DIR, 'static'),
os.path.join(BASE_DIR, 'app01', 'static') # 你也可以配置多个静态文件目录,只需拼上路径就好了
]
b、多app开发:各自app的静态文件放在各自 /static/app名字/。。。
下,一般会在APP目录下的static目录下嵌套一层,APP名字的目录,引入静态文件加上目录名称
禁止
<img src="/static/api/1.png">
建议
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>登录页面</h1>
<a href="/xxx/xxxxx/">调换dao xx</a>
<a href="{% url 'login' %}">跳转</a>
<img src="{% static 'api/1.png' %}">
</body>
</html>
3、媒体文件
a、访问媒体文件时要在路由里面加上媒体文件的配置
b、Urls.py文件
from django.contrib import admin
from django.urls import path, re_path, include
from django.conf.urls.static import static
from django.conf import settings
from apps.api import views
# 很多功能,很多URL
urlpatterns = [
path('api/', include('apps.api.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)