全书目录

第十四篇:Django 完全指南 —— 中央行政城区宇宙

第十二章:静态文件 —— 城区招牌、海报、制服,不等于市民上传材料

1 分钟 263 字 第 286 / 962 个阅读单元

Django 里最容易混淆的一组概念,是 staticmedia

你要把它们想成两类完全不同的东西:

text
Static files(静态文件)
= 城区自己的固定资产
= CSS / JS / Logo / 图标 / 背景图

Media files(媒体文件)
= 用户上传材料
= 头像 / 附件 / 申请证明 / 图片

静态文件最典型的放法:

text
permits/
└── static/
    └── permits/
        └── permit.css

模板里这样引用:

html
{% load static %}
<link rel="stylesheet" href="{% static 'permits/permit.css' %}">

配置通常长这样:

py
STATIC_URL = "static/"
STATIC_ROOT = BASE_DIR / "staticfiles"

MEDIA_URL = "media/"
MEDIA_ROOT = BASE_DIR / "media"

开发环境如果要临时服务媒体文件,可以在总路由里追加:

py
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

上线前你还要知道一个关键动作:

bash
python manage.py collectstatic

它的作用像什么?

像把各部门零散的海报、制服、招牌,统一收进城区总物资仓库,方便正式对外分发。

一条必须刻在脑子里的分界线:

  • static 是项目自己的资产
  • media 是用户的上传内容

千万别把用户上传的东西当静态文件管理,也别把项目 CSS/JS 当用户媒体来处理。