1. 基本概念
1.1 重要配置项
STATIC_URL
: 静态文件的URL访问路径
STATIC_ROOT
: 静态文件收集的目标目录
STATICFILES_DIRS
: 额外的静态文件目录列表
STATICFILES_FINDERS
: 静态文件查找器配置
1.2 目录结构
myproject/
├── manage.py
├── myproject/
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── myapp/
│ ├── static/
│ │ └── myapp/
│ │ ├── css/
│ │ ├── js/
│ │ └── images/
│ └── templates/
└── static/ # 收集后的静态文件目录
2. 配置说明
2.1 基础配置
# settings.py
# 静态文件URL前缀
STATIC_URL = '/static/'
# 静态文件收集目录
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
# 额外的静态文件目录
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'common_static'),
]
# 静态文件查找器
STATICFILES_FINDERS = [
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
]
2.2 URL配置
# urls.py
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
# ... 其他URL配置
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
3. 静态文件收集
3.1 收集命令
# 收集所有静态文件
python manage.py collectstatic
# 清空后收集
python manage.py collectstatic --clear
# 交互式收集
python manage.py collectstatic -i
3.2 注意事项
- 确保每个应用的static目录结构正确
- static目录下建议使用应用名作为子目录
- 避免静态文件命名冲突
- 定期清理未使用的静态文件
4. 开发环境配置
4.1 调试模式
# settings.py
DEBUG = True
if DEBUG:
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]
4.2 生产环境配置
# settings.py
DEBUG = False
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'
# 使用 WhiteNoise 处理静态文件
MIDDLEWARE = [
'whitenoise.middleware.WhiteNoiseMiddleware',
# ... 其他中间件
]
5. 常见问题解决
5.1 静态文件无法访问
# 检查项
1. DEBUG 模式是否开启
2. STATIC_URL 配置是否正确
3. 是否执行了 collectstatic
4. 文件权限是否正确
5.2 文件路径问题
# 推荐的静态文件组织方式
myapp/static/myapp/css/style.css
myapp/static/myapp/js/script.js
# 模板中引用
{% load static %}
<link href="{% static 'myapp/css/style.css' %}" rel="stylesheet">
6. 最佳实践
6.1 目录组织
- 使用应用名作为静态文件子目录
- 按类型组织静态文件(css、js、images)
- 使用有意义的文件名
6.2 性能优化
- 使用静态文件缓存
- 压缩静态文件
- 使用CDN加速
- 实现文件版本控制
6.3 安全建议
- 限制上传文件类型
- 设置适当的文件权限
- 使用安全的文件存储方式
- 定期清理临时文件