vscode 官方市场无名为“django”的扩展,需手动在.vscode/settings.json中配置"python.django": true并重启语言服务器,才能启用django模板语法支持、url跳转及installed_apps识别。

VSCode 里根本没“Django 扩展”这回事
直接说结论:VSCode 官方市场没有叫 “Django” 的核心扩展,也不存在一个插件能“一键配置 Django”。所谓“Django 扩展”,实际是开发者把多个独立插件组合使用形成的习惯性说法。真正起作用的是 ms-python.python(Python 官方扩展),它自带对 Django 模板语法、{% url %}、{{ variable }} 的基础支持,但默认不启用高级功能。
常见错误现象:{% extends "base.html" %} 红线报错、{% static %} 不识别、点击 {% url 'name' %} 跳不到对应视图——不是插件没装,而是没告诉 VSCode “这是 Django 项目”。
- 必须在工作区根目录下创建
.vscode/settings.json - 在里面显式开启 Django 支持:
"python.defaultInterpreterPath"已选对虚拟环境后,加这一行:"python.formatting.provider": "black"(可选)和关键项:"python.languageServer": "Pylance" - 最重要的是添加:
"python.django": true—— 这个开关一开,Pylance 才会解析settings.py、识别INSTALLED_APPS、补全模板标签和过滤器
为什么 python.django: true 必须手动写
VSCode 不会自动检测你用了 Django。它只认明确配置。即使你 pip install django 并成功运行 manage.py runserver,只要 settings.json 里没这行,编辑器就当普通 Python 项目处理。
使用场景:你刚 clone 一个别人写的 Django 项目,打开后所有模板语法都标红,from django.urls import path 提示未解析 —— 八成就是漏了这行。
-
.vscode/settings.json是工作区级配置,只影响当前文件夹,不会污染全局 - 路径必须正确:确保
settings.py在${workspaceFolder}下(比如myproject/settings.py),否则python.django: true无效 - 如果项目结构是
src/myproject/settings.py,需额外配"python.defaultInterpreterPath"和"python.envFile"指向正确位置
launch.json 配错 module 就等于没调试
很多人点绿色三角直接运行 manage.py,结果断点不触发、DJANGO_SETTINGS_MODULE 不生效。根本原因是 VSCode 把它当普通脚本执行,绕过了 Django 的命令注册机制。
正确做法是用 "module": "django" 启动,让 VSCode 执行 python -m django runserver,这样才能加载 settings、激活中间件、识别 app。
- 必须配
"args": ["runserver", "--noreload"]:Django 自动重载会 fork 子进程,VSCode 只附着在主进程,不加--noreload断点永远不命中 -
"env"里"DJANGO_SETTINGS_MODULE"值必须是 Python 导入路径,不是文件路径 —— 写"myproject.settings",别写"./myproject/settings.py" -
"PYTHONPATH": "${workspaceFolder}"很关键:否则python -m django找不到你的项目模块
模板跳转失效?检查 INSTALLED_APPS 是否被识别
{% url 'blog:detail' %} 点不了、{% include "partial.html" %} 找不到文件,问题往往不在插件,而在 VSCode 没读到你的 app 列表。
Pylance 依赖 settings.py 中的 INSTALLED_APPS 来建立模板上下文索引。如果这个列表是动态拼接的(比如用 os.listdir() 自动发现 apps),Pylance 解析失败,跳转就失效。
- 确保
INSTALLED_APPS是静态字符串列表,例如:['blog', 'users', 'django.contrib.admin'] - 避免写成:
INSTALLED_APPS = ['django.contrib.admin'] + find_apps()—— Pylance 不执行代码,只做静态分析 - 如果用了
django-environ或类似库管理配置,把INSTALLED_APPS单独抽出来放顶层,别藏在函数里
最常被忽略的一点:改完 settings.py 或 settings.json 后,必须重启 VSCode 的语言服务器(Ctrl+Shift+P → “Python: Restart Language Server”),否则新配置不生效。











