需精准配置文件关联与emmet映射:在settings.json中设"/templates//*.html":"django-html"和"emmet.includelanguages":{"django-html":"html"},并重载窗口生效。

VSCode 默认不识别 Django 模板语法,{% if %}、{{ user }} 这类内容会当普通文本渲染,没有高亮、没有 Emmet 补全、没有跳转支持——必须手动配置语言关联和 Emmet 映射才能解决。
怎么让 .html 文件自动识别为 Django 模板?
VSCode 不会根据项目结构(比如是否在 templates/ 目录下)自动判断模板类型,只靠文件路径匹配。常见错误是只配了 "**/*.html":"django-html",结果所有 HTML 都变 Django 模板,连 index.html(纯前端页)也丢了原生 HTML 补全。
- 正确做法:用通配路径精准匹配 Django 模板位置,例如
"**/templates/**/*.html":"django-html"或"myproject/templates/**/*.html":"django-html" - 如果项目用多个模板目录(如
app1/templates/、shared/templates/),需分别写多条规则,VSCode 不支持 glob 的“或”逻辑 - 配置位置:打开
settings.json(Ctrl+, → 右上角打开设置 JSON 图标),加到"files.associations"里 - 改完后,已打开的
.html文件要重新加载(Ctrl+Shift+P → “Developer: Reload Window”)才生效
为什么写了 django-html 还没 Emmet 补全?
Emmet 默认只对 html 语言启用,django-html 是 VSCode 的自定义语言标识,不在 Emmet 白名单里。不加映射,敲 div.container + Tab 就没反应。
- 必须在
settings.json中添加:"emmet.includeLanguages":{"django-html":"html"} - 这个映射告诉 Emmet:“遇到
django-html类型的文件,按 HTML 规则展开缩写” - 注意不是
"django-html":"django-html"—— 那样 Emmet 找不到对应语法定义,直接失效 - 如果用了 Djaneiro 插件,它提供的
{% url %}等标签补全,依赖的是 Python 语言服务,和 Emmet 无关,无需额外配置
为什么 {% load static %} 后的 {% static %} 还是灰色、没高亮?
这是语法高亮机制的固有限制。VSCode 的 TextMate 语法基于静态正则,无法解析 {% load %} 动态引入的标签库,所以 {% static %}、{% url %}、{% get_current_language %} 这些都默认当普通 block 标签处理,颜色和 {% if %} 一样。
- 这不是配置错误,是当前技术方案下的合理妥协;Sublime 和 Vim 的 Django 插件同样存在该问题
- 不影响运行,也不影响 Djaneiro 的代码片段补全(它靠触发词匹配,不是语法分析)
- 想获得跳转支持(比如点击
{% extends "base.html" %}跳到文件),得靠 Python 插件(如 Pylance)配合 Django 项目结构识别,但对模板内路径的支持仍不稳定 - 若视觉区分强烈需求,可用
editor.tokenColorCustomizations+textMateRules单独给support.tag.django.static类作用域着色,但需先用开发者工具(Help → Toggle Developer Tools → Inspect Editor Tokens)确认实际 scope 名
真正容易被忽略的点是:Django 模板语法高亮和补全,从来就不是“开个开关就能全好”的事。它由三块拼图组成——文件关联(files.associations)、Emmet 映射(emmet.includeLanguages)、以及插件能力(Djaneiro / Pylance)。少一块,就会出现“能高亮但不能补全”或“能补全但跳不了转”的割裂感。调试时优先检查右下角语言模式是否真显示为 django-html,再看 settings.json 里两条配置是否同时存在且拼写无误。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











