VSCode调试Django失败主因是解释器未指向含Django的虚拟环境或launch.json未配为Django模式:须选venv路径解释器,launch.json中设"module":"django"、"args":["runserver","--noreload"]、"env":{"DJANGO_SETTINGS_MODULE":"myproject.settings"},并确保urls.py用static()注册静态路由。

VSCode 调试 Django 项目失败,90% 是因为没用对 Python 解释器,或 launch.json 没配成 Django 启动模式——它不会自动识别 manage.py 是 Django 入口,必须显式告诉它“这是 Django,不是普通脚本”。
Python 解释器必须指向装了 Django 的虚拟环境
VSCode 不继承终端的激活状态,即使你在终端里 pip install django 成功了,它也可能用系统 Python 去跑,结果报 ModuleNotFoundError: No module named 'django'。
- 按
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS),输入并选择Python: Select Interpreter - 从列表中只选带
venv或env字样的路径,例如:./venv/bin/python(Linux/macOS)或.\venv\Scripts\python.exe(Windows) - 绝对别选
/usr/bin/python3、C:\Python39\python.exe这类系统级路径 - 选完后看窗口右下角状态栏是否显示该路径;再打开一个新
.py文件,悬停from django.conf import settings看有没有红线
launch.json 必须用 "module": "django",不能用 program
用 "program": "./manage.py" 启动,VSCode 会当普通脚本执行,跳过 Django 的命令解析逻辑,导致断点不命中、DJANGO_SETTINGS_MODULE 不生效、甚至直接退出无报错。
- 在项目根目录建
.vscode/launch.json,用Python: Django模板生成基础配置 -
"module"字段必须是"django",不是"manage",也不是留空 -
"args"至少包含["runserver", "--noreload", "8000"]——--noreload是必须的,否则 Django 自动重载会 fork 子进程,VSCode 只附着在主进程上 -
"env"字段至少写上:"DJANGO_SETTINGS_MODULE": "myproject.settings"(替换成你实际的模块路径)和"PYTHONPATH": "${workspaceFolder}"
静态文件 404?检查主 urls.py 是否注册了 static()
DEBUG=True 不等于静态文件自动可访问。Django runserver 默认只在 URL 匹配 STATIC_URL 时才代管静态文件,但前提是主 urls.py 里显式调用了 static() 函数注册路由。
立即学习“Python免费学习笔记(深入)”;
- 打开主
urls.py(通常是myproject/urls.py) - 确认有这段(仅开发用):
from django.conf import settings<br>from django.conf.urls.static import static<br><br>urlpatterns = [<br> # ... 其他路由<br>]<br><br>if settings.DEBUG:<br> urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
- 别漏掉
if settings.DEBUG:判断,生产环境不能这样暴露静态文件
断点灰色、不触发?先确认是否真在执行路径上
不是所有红色断点都会生效——如果对应代码根本没被调用,或者被中间件/装饰器跳过,断点就是灰色的,悬停提示 “Breakpoint ignored because generated code…”。
- 确保请求 URL 真的走到你打断点的那个视图函数(比如检查
urls.py是否正确映射) - 检查中间件是否提前返回(如认证失败、权限拒绝)
- 避免在
__init__.py、模板标签、或未注册的管理命令里打断点——它们可能根本不会被runserver加载 - 调试时看控制台输出是否真有
Starting development server和你的请求日志,而不是静默退出
最常被忽略的是:VSCode 调试器对子进程完全无感知,所以 --noreload 不是可选项,是生死线;而 DJANGO_SETTINGS_MODULE 必须是模块路径(myproject.settings),不是文件路径(myproject/settings.py)——拼错一个点,整个调试链就断了。


















