VSCode调试Django需严格对齐解释器、launch.json配置和环境变量:解释器必须指向含Django的虚拟环境;launch.json须用"module": "django"而非"program",并设"args": ["runserver","--noreload"]及正确DJANGO_SETTINGS_MODULE;静态文件404需在urls.py中显式注册static()路由。

VSCode 不能“直接运行”Django 项目,必须手动对齐解释器、启动模块和环境变量三者,否则必现 ModuleNotFoundError: No module named 'django' 或断点完全不触发。
Python 解释器必须指向装了 Django 的虚拟环境
VSCode 不继承终端里 source venv/bin/activate 的状态,它只认你在 UI 里手动选的那个 python 可执行文件路径。选错解释器,90% 的问题就在这一步。
- 按
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:\Python312\python.exe这类系统路径——Django 很可能根本没装在那里 - 选完立刻看窗口右下角是否显示该路径;再新开终端执行
which python(macOS/Linux)或where python(Windows),输出必须一致
launch.json 必须用 "module": "django",不能用 program
设 "program": "./manage.py" 是最常见误区:VSCode 会把它当普通脚本执行,跳过 Django 自己的命令解析流程,导致 DJANGO_SETTINGS_MODULE 不生效、runserver 不真正启动、断点打在视图函数上也完全不命中。
提供使用 django-unfold (v0.56+) 构建高级 Django 管理界面的专业指导。当用户提及 django-unfold、unfold admin 等内容时使用此技能。
- 在项目根目录建
.vscode/launch.json,配置中必须包含:"module": "django" -
"args"至少为["runserver", "--noreload"]——--noreload是必须的,否则自动重载会 fork 子进程,调试器附着不稳定 -
"env"中硬编码"DJANGO_SETTINGS_MODULE": "myproject.settings"(替换成你真实的模块路径,不是文件路径) - 如果用了多 settings 文件(如
settings/dev.py),这里填myproject.settings.dev,且确保该模块能被import
静态文件 404?检查 urls.py 是否注册了 static()
DEBUG=True 不等于静态文件自动可访问。Django 开发服务器默认只在 URL 匹配 STATIC_URL 时才代管静态文件,但前提是主 urls.py 里显式调用了 static() 函数注册路由。
- 打开主
urls.py(通常是myproject/urls.py),确认有这两行:from django.conf import settings和from django.conf.urls.static import static - 并在
urlpatterns列表末尾加上:+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) - 注意:这段只应在
DEBUG=True时启用,生产环境必须由 Nginx 等反向代理处理静态文件
服务器部署时,manage.py 位置偏移会导致 launch.json 失效
最容易被忽略的是:所有 VSCode 配置都依赖 manage.py 在项目根目录。如果它被挪到子目录(比如 src/manage.py),launch.json 就得改用 "module": "django.core.management" 并手动指定 pythonpath 和 args,否则 runserver 启动失败且无明确报错。
- 若项目结构是
src/myproject/+src/manage.py,则需在launch.json中加"pythonPath": "${workspaceFolder}/src" - 同时把
"module"改为"django.core.management","args"改为["runserver", "--noreload", "8000"] - 此时
DJANGO_SETTINGS_MODULE值仍需对应真实模块路径,例如myproject.settings,而非src.myproject.settings

















