Django 静态文件(static files)配置与访问指南
Django 静态文件(static files)配置与访问指南
适用场景:图片、CSS、JS 等「纯前端资源」在开发阶段的快速调试与展示。
一、为什么需要单独放?
模板里直接写 <img src="a.png">
也能跑,但随着项目膨胀会出现:
-
文件散落在各处,版本管理混乱;
-
前端同事无法独立维护;
-
部署时需要额外脚本把资源拷到 CDN。
Django 推荐统一放在 static 目录,按「应用」或「全局」两级组织。
二、三步骤一次到位
- 创建目录
在项目根目录(与manage.py
同级)右键 → New → Directory → 取名 static。
例:
mysite/
├── manage.py
├── mysite/
└── static/ ← 新建
└── c.png
- 告诉 Django 去哪儿找
打开settings.py
,追加或修改:
import os
STATIC_URL = '/static/' # 访问前缀,可随意改,如 '/s/'、'/assets/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'), # 刚才创建的目录
]
注意:
-
单词拼写务必正确(
STATICFILES_DIRS
多了个 S); -
仅当
DEBUG=True
时 Django 才会帮你托管这些文件。
- 浏览器访问
启动开发服务器:
python manage.py runserver
在地址栏输入:
http://127.0.0.1:8000/static/c.png
看到图片即成功。
三、模板里怎么引用?
Django 提供了 {% static %}
标签,避免硬编码前缀:
{% load static %}
<img src="{% static 'c.png' %}" alt="logo">
以后把 STATIC_URL
从 /static/
改成 /assets/
,模板一行不动即可生效。
四、常见踩坑提示
症状 | 原因 | 解决 |
---|---|---|
404 找不到 | 目录名或 STATICFILES_DIRS 写错 |
检查拼写、确认 BASE_DIR/static 存在 |
改了前缀后失效 | 只改了目录名,没改 STATIC_URL |
目录名随意,STATIC_URL 必须与访问路径一致 |
生产环境空白 | DEBUG=False 时 Django 不再托管 |
使用 collectstatic 收集并交给 Nginx |
五 总结
本文说的是开发环境(DEBUG=True
),生产环境需配合 collectstatic
与 Web 服务器(Nginx、Apache)另行部署。**collectstatic:把散落各地的静态文件“打包搬家,**运行 python manage.py collectstatic
,Django 会把所有静态文件收集到 一个统一目录(由 settings.py
中的 STATIC_ROOT
指定)。而Nginx 是纯 C 写的 Web 服务器,处理静态文件比 Python 的 Django 快 10 倍以上(省 CPU、省内存)。
在 Nginx 配置文件中加一段规则,把静态文件的 URL 直接映射到 collectstatic
收集的目录:
# /etc/nginx/sites-available/myproject
server {
listen 80;
server_name example.com;
# 动态请求(如 /api/、/admin/)转发给 Django
location / {
proxy_pass http://127.0.0.1:8000; # 假设 Django 跑在 8000 端口
}
# 静态文件(如 /static/c.png)直接由 Nginx 处理
location /static/ {
alias /var/www/myproject/static/; # 必须和 STATIC_ROOT 一致
}
}
重启Nginx即可
- 点赞
- 收藏
- 关注作者
评论(0)