vscode调试django需确保解释器、环境变量、启动方式三者对齐:选中venv路径的python解释器;launch.json中设"module":"django"、"args":["runserver","--noreload"]、"env"硬编码所需变量;静态文件404需在urls.py中用static()显式注册且debug=true。

VSCode 不能直接“运行”Django项目,必须先确保解释器、环境变量、启动方式三者对齐,否则必然报 ModuleNotFoundError: No module named 'django' 或断点不生效。
Python 解释器选错是 90% 启动失败的根源
VSCode 不会自动继承你终端里激活的虚拟环境。它只认你在 “Python: Select Interpreter” 里手动选中的那个 python 可执行文件路径。
- 按
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 很可能没装在那里 - 选完后看 VSCode 窗口右下角是否显示该路径;再新开一个终端,执行
which python(macOS/Linux)或where python(Windows),输出应与右下角一致
launch.json 必须配 "module": "django" 而不是 manage.py
用 program 指向 manage.py 是常见误区:它会让调试器附着在脚本启动阶段,而 Django 实际请求处理发生在子进程中,断点自然失效。
Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。本文给大家带来Go参考手册,需要的可以来下载! Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。 Go 语言特色 简洁、快速、安全 并行、有趣、开源 内存管理、v数组安全、编译
- 在项目根目录建
.vscode/launch.json,配置如下:
{
"version": "0.2.0",
"configurations": [
{
"name": "Django",
"type": "python",
"request": "launch",
"module": "django",
"args": ["runserver", "--noreload"],
"django": true,
"env": {
"DJANGO_SETTINGS_MODULE": "myproject.settings"
}
}
]
}
-
"module": "django"表示用python -m django启动,避免 fork 子进程导致断点丢失 -
--noreload关闭 autoreload,否则调试器无法稳定附着 -
"django": true启用 VSCode Python 扩展对 Django 模板、URL 路由等的调试支持 -
DJANGO_SETTINGS_MODULE必须显式设为你的 settings 模块路径,不能依赖默认值
环境变量(如 DEBUG、DATABASE_URL)读不到?不是没传,是读太早
os.getenv('DEBUG') 在模块顶层执行时返回 None,往往是因为 Django 配置尚未加载,或者 .env 文件没被 django-environ 读取——但更常见的是 VSCode 调试器根本没把 env 字段注入到子进程。
- 在
launch.json的"env"字段里硬编码所需变量,例如:"DEBUG": "1"、"DATABASE_URL": "sqlite:///db.sqlite3" - 如果用
django-environ,确保.env和manage.py同级,且settings.py顶部有environ.Env()初始化 - 避免在模块顶层调用
os.getenv();改用settings.DEBUG这类延迟求值方式,它会在 Django 配置加载完成后才解析
静态文件 404、路由 404 不是代码写错了,是开发服务器没配对
VSCode 调试启动的 runserver 和你在终端里敲的命令行为完全一致——所以如果终端能访问 /static/css/app.css,而 VSCode 里 404,问题一定出在 URL 路由注册或 DEBUG 开关上。
- 检查主
urls.py是否包含以下开发专用段(仅 DEBUG=True 时生效):
from django.conf import settings
from django.conf.urls.static import static
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
-
STATIC_URL和STATICFILES_DIRS配置正确 ≠ 开发服务器会自动服务静态文件——必须靠static()函数显式注册 URL - 确保
settings.DEBUG = True,否则static()返回空列表,路由根本不注册 - 不要依赖浏览器缓存:强制刷新(
Ctrl+Shift+R)或检查 Network 面板确认请求是否真的发到了/static/路径
最常被忽略的一点:--noreload 不只是让断点有效,它还决定了环境变量能否稳定传递到处理请求的进程——autoreload 会反复 fork 新子进程,而 VSCode 的 env 字段只作用于初始进程。一旦漏掉这个参数,哪怕 launch.json 写得再全,os.getenv 也可能在视图里突然变 None。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










