Django 里最容易混淆的一组概念,是 static 和 media。
你要把它们想成两类完全不同的东西:
Static files(静态文件)
= 城区自己的固定资产
= CSS / JS / Logo / 图标 / 背景图
Media files(媒体文件)
= 用户上传材料
= 头像 / 附件 / 申请证明 / 图片静态文件最典型的放法:
permits/
└── static/
└── permits/
└── permit.css模板里这样引用:
{% load static %}
<link rel="stylesheet" href="{% static 'permits/permit.css' %}">配置通常长这样:
STATIC_URL = "static/"
STATIC_ROOT = BASE_DIR / "staticfiles"
MEDIA_URL = "media/"
MEDIA_ROOT = BASE_DIR / "media"开发环境如果要临时服务媒体文件,可以在总路由里追加:
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)上线前你还要知道一个关键动作:
python manage.py collectstatic它的作用像什么?
像把各部门零散的海报、制服、招牌,统一收进城区总物资仓库,方便正式对外分发。
一条必须刻在脑子里的分界线:
static是项目自己的资产media是用户的上传内容
千万别把用户上传的东西当静态文件管理,也别把项目 CSS/JS 当用户媒体来处理。