Django 静态文件(static files)配置与访问指南

举报
周杰伦本人 发表于 2025/07/30 14:15:26 2025/07/30
【摘要】 Django 静态文件(static files)配置与访问指南适用场景:图片、CSS、JS 等「纯前端资源」在开发阶段的快速调试与展示。 一、为什么需要单独放?模板里直接写 <img src="a.png"> 也能跑,但随着项目膨胀会出现:文件散落在各处,版本管理混乱;前端同事无法独立维护;部署时需要额外脚本把资源拷到 CDN。Django 推荐统一放在 static 目录,按「应用」或...

Django 静态文件(static files)配置与访问指南

适用场景:图片、CSS、JS 等「纯前端资源」在开发阶段的快速调试与展示。

一、为什么需要单独放?

模板里直接写 <img src="a.png"> 也能跑,但随着项目膨胀会出现:

  • 文件散落在各处,版本管理混乱;

  • 前端同事无法独立维护;

  • 部署时需要额外脚本把资源拷到 CDN。

Django 推荐统一放在 static 目录,按「应用」或「全局」两级组织。

二、三步骤一次到位

  1. 创建目录
    在项目根目录(与 manage.py 同级)右键 → New → Directory → 取名 static
    例:
mysite/
├── manage.py
├── mysite/
└── static/        ← 新建
  └── c.png
  1. 告诉 Django 去哪儿找
    打开 settings.py,追加或修改:
import os
STATIC_URL = '/static/'          # 访问前缀,可随意改,如 '/s/''/assets/'
STATICFILES_DIRS = [
  os.path.join(BASE_DIR, 'static'),  # 刚才创建的目录
]

注意:

  • 单词拼写务必正确(STATICFILES_DIRS 多了个 S);

  • 仅当 DEBUG=True 时 Django 才会帮你托管这些文件。

  1. 浏览器访问
    启动开发服务器:
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即可

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。