django-html模式下tab不触发变量补全,需先确认文件关联是否生效:右下角状态栏应显示django-html而非html,点击后配置文件关联为django-html,并重启vscode;同时需在emmet.includelanguages中绑定django-html→html,且安装django-stubs以支持类型推断。

django-html 模式下 Tab 键不触发变量补全?先确认文件关联是否生效
VSCode 默认把 .html 当作纯 HTML 处理,{{ user.name }} 里的 user. 根本不会触发任何补全——这不是快捷键问题,是语言模式没切对。
右下角状态栏显示的是 HTML 而不是 django-html,就说明关联失败。点击该标签 → 选 Configure File Association for '.html' → 输入 django-html(注意拼写,不是 django 或 html-django)→ 回车。
- 该设置会写入工作区
.vscode/settings.json,形如"files.associations": {"*.html": "django-html"} - 改完必须重启 VSCode 或重新打开该文件,否则插件不加载语言服务
- 如果项目里混用 Jinja2 或其他模板,建议用
**/templates/**/*.html这类 glob 模式做更精准的关联
装了 ms-python.django 插件,但 request.user 还是没提示?检查 context_processors 和插件启用状态
ms-python.django(Microsoft 官方版,ID 是 ms-python.django)必须启用,且不能和旧插件如 batisteo.vscode-django 共存——后者会冲突并静默禁用补全。
补全 request.user、form.errors 这类变量,依赖 Django 的上下文处理器配置。如果 TEMPLATES 设置里没包含:
"context_processors": [
"django.template.context_processors.request",
"django.contrib.auth.context_processors.auth"
]
那插件根本“看不到”这些变量,按 Tab 或 Ctrl+Space 都不会出建议。
- 确认
settings.py中TEMPLATES的OPTIONS下有完整context_processors列表 - 插件需读取
INSTALLED_APPS才能识别{% load static %}等标签,确保它没被禁用(扩展面板里看是否打勾) - 若仍无提示,试一下
Ctrl+Shift+P→ 输入Developer: Toggle Developer Tools,看控制台是否有django-html相关报错
想写 <div class="btn"> 却只补全 django 标签?Emmet 必须手动绑定到 django-html
<p>装了 Django 插件后,<code>{% for %} 补全了,但 div、ul>li*3 这类 Emmet 缩写还是没反应——因为 Emmet 默认不认 django-html 模式。
进设置 → 搜索 Emmet: Include Languages → 点加号 → Item 填 django-html,Value 填 html。
- 这个绑定让 Emmet 把
django-html当作 HTML 来处理,所有缩写(nav>ul>li*5)、属性补全(class="foo"自动加引号)全部恢复 - 注意:必须输入完整单词,比如
div后按Enter或Tab才展开,<div> 不触发 <li>如果用了自定义 HTML 片段(如 <code>my-component),需额外在emmet.variables里声明 - 运行
pip install django-stubs(推荐在项目虚拟环境中) - 在
pyrightconfig.json或settings.json中确认启用了typeCheckingMode: "basic"或更高 -
objects、related_name、get_absolute_url这些动态属性,全靠django-stubs提供 stubs 注解,否则无论你怎么按Ctrl+Space都不会出现
PyLance 报 User.objects 不存在?django-stubs 不是可选项,是必需项
后端 Python 文件里写 User.objects.all(),Pylance 标红说 Class 'User' has no 'objects' member——这跟快捷键无关,是类型系统缺 Django 运行时元信息。
仅靠 ms-python.python 和 ms-python.django 插件无法解决。必须安装 django-stubs 并确保 Pylance 启用它:
补全不是万能的,Django 的动态性决定了很多东西必须靠类型桩(stub)显式描述;漏掉 django-stubs,再熟的快捷键也救不了变量推断。











